Java

【Java】WebSocketサーバの実装

はじめに

今回は、JavaによるWebSocketサーバーの実装方法を解説します。

今回のサンプルでは、サーバ側はJavaで作成し、クライアント側はjavascriptで実装します。

最終的にはクライアント側が送信したメッセージをサーバが受け取り、サーバからクライアントへメッセージを返却することを確認します。

サーバ側の実装は以前ご紹介した以下の記事とほとんど同じです。

【Java】WebSocketクライアントの実装はじめに 今回は、JavaによるWebSocketクライアントの実装方法を解説します。 今回のサンプルでは、WebSocketク...

よく使用するシチュエーションとしては、WEBサイトからサーバーサイドにWebsocket通信し、リアルタイムでデータ取得等を行いたいときに使用します。

以降、以下のバージョン、環境での解説となります。

IDE:eclipse
Tomcatバージョン:8.5
Javaバージョン:8
OS:Mac OS

フォルダ構成

今回作成するサンプルソースのフォルダ構成は以下の通りです。

– サーバーサイド

スクリーンショット 2018-11-10 11.58.03.png

– クライアントサイド

スクリーンショット 2018-11-10 12.01.36.png

プロジェクトの作成

1. サーバサイドのプロジェクト作成

Eclipseを起動し、パッケージエクスプローラーで右クリック>新規>その他>Web>動的Javaプロジェクトを選択し、
「SampleServer」というプロジェクトを作成します。

2. クライアントサイドのプロジェクト作成

クライアントサイドのプロジェクトについては、ローカルフォルダのどこに作成してもよいです。
本手順では以下に「SampleWebSite」というフォルダを作成します。

WebSocketサーバの実装

WebSocketServer.javaを作成し、必要なライブラリをインポートします。

WebSocketでサーバ側がデータを受け取る場合は、@ServerEndpointというアノテーションとエンドポイントを指定し、クライアント側が対象のjavaファイルを見つけられるように目印をつけてやる必要があります。

なお、エンドポイントは今回「/WebSocketServer」とします。

続いてwebsocketクラスのアノテーションを利用して、以下の処理を実装します。

– セッション確立時の処理
– メッセージ受信時の処理
– エラー発生時の処理
– セッション解放時の処理

さいごにクライアントからメッセージを受信したら、「正常にメッセージを受信しました。」というメッセージを送信する処理を実装します。

戻り値を返却するので、onMessageの型をvoid→Stringへ変更するのを忘れないようにしてください。

これでWebSocketサーバは完成です。

最後にコード全体をのせておきます。

WebSocketクライアントの実装

1. index.htmlの作成

SampleWebSiteフォルダへ以下のindex.htmlを作成します。

今回websocket通信部分はjQueryを使用するので、jQueryのライブラリを読みこんでいます。

また、javascriptで受け取ったメッセージをブラウザに表示するようボディ部へid=”message”を埋め込みます。

2. script.jsの作成

SampleWebSiteフォルダへ以下のscript.jsを作成します。

urlは以下のように設定してください。

「Hello World!!」というメッセージを送信し、受信したメッセージは#messageでindex.htmlへ渡しています。

動作確認

1. サーバの起動

WebSocketServer.javaを右クリック>実行>サーバで実行をクリックし、サーバを起ち上げます。

2. クライアントの起動

以下のURLへアクセスしてください。

file:///Users/ユーザー名/SampleWebSite/index.html

なお、SampleWebSiteフォルダを置いた場所にあわせてURLのパスを指定してください。

3. 結果確認

最後に、コンソールにクライアントから投げた「Hello World!!」というメッセージが
サーバ側のコンソールに出力されており、ブラウザ側へ「正常にメッセージを受信しました。」と出ていたらOKです。

■サーバーサイドコンソール

■ブラウザ

さいごに

今回、JavaによるWebSocketサーバの実装方法を簡単にご紹介させていただきました。

サーバサイド側はJavaで実装されていることが多いので、本機能はよく使用されます。

実際に私もいくつかの案件で見かけました。

せひ参考にしていただければと思います。