Java の WebSocket を使って開発したエコーアプリの動作確認をしていきます。エコーアプリの資源と起動方法は、以下の記事にまとめています。
画面の表示
エコーアプリを起動してから、ブラウザで http://localhost:8080/ws-echo/ にアクセスすると下のような画面が開きます。

画面上が入力エリアで、下が表示エリアです。下はサーバに送信して返ってきたメッセージが表示されます。
エコーの確認
画面を開いたら、
- 文字を入力して送信ボタンを押して、
- 文字列が表示されることを確認します。
入力エリアの下に文字列が表示されれば、サーバーのエコーを受け取ったことになります。
Jetty で起動した場合のタイムアウト
Jetty で動作確認していると、接続がタイムアウトすることがありました。
そのときに発生した例外を掲載しておきます。
@OnError:
java.net.SocketTimeoutException: Timeout on Read
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onReadTimeout(AbstractWebSocketConnection.java:592)
at org.eclipse.jetty.io.AbstractConnection.onFillInterestedFailed(AbstractConnection.java:170)
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillInterestedFailed(AbstractWebSocketConnection.java:538)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.failed(AbstractConnection.java:285)
at org.eclipse.jetty.io.FillInterest.onFail(FillInterest.java:140)
at org.eclipse.jetty.io.AbstractEndPoint.onIdleExpired(AbstractEndPoint.java:398)
at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:166)
at org.eclipse.jetty.io.IdleTimeout$1.run(IdleTimeout.java:50)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:299)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.base/java.lang.Thread.run(Thread.java:844)
@OnClose: CloseReason[1001,Idle Timeout]
EchoSocket クラスの @OnError に例外が渡ってきて画面に出力されたものです。@OnClose も実行されていて、理由はタイムアウトとなっています。ブラウザで何も操作しないでいると、タイムアウトが発生するような気がします。
Tomcat のほうは、だいぶ待ったんですが、同じようなタイムアウトは発生しませんでした。