お客様のために、 Tomcat 8.0.29を使用して HTML5 websocket アプリケーションを構築します。ネットワークまたはホーム ネットワークからアプリケーションを起動すると、すべて正常に動作します。しかし、顧客が自分のネットワークからアプリケーションを起動すると、一定時間後に websocket がエラーで停止します。これは 5 分または 20 分後に発生する可能性があります。
SSL の有無にかかわらず、2 つの異なるサーバーでテストしました。お客様のネットワークでのみ、接続がエラーで切断されます。
また、Tomcat に含まれている websocket echo の例でテストを行います。私たちのウェブソケットと同じです。一定時間後、websocket はエラーで停止します。ただし、お客様のネットワークからアプリケーションを起動した場合に限ります。
エコーの例がエラーで停止すると、次のメッセージが server.log に書き込まれます。
08-Dec-2015 10:20:37.757 SEVERE [http-apr-8081-exec-2] org.apache.tomcat.websocket.pojo.PojoEndpointBase.onError No error handling configured for [websocket.echo.EchoAnnotation] and the following error occurred
java.io.IOException: Unexpected error [730,054] reading data from the APR/native socket [1,639,490,672] with wrapper [org.apache.tomcat.util.net.AprEndpoint$AprSocketWrapper@231e01e4:1639490672].<br/>
at org.apache.coyote.http11.upgrade.AprServletInputStream.doRead(AprServletInputStream.java:133)<br/>
at org.apache.coyote.http11.upgrade.AbstractServletInputStream.read(AbstractServletInputStream.java:124)<br/>
at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:51)<br/>
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler$WsReadListener.onDataAvailable(WsHttpUpgradeHandler.java:183)<br/>
at org.apache.coyote.http11.upgrade.AbstractServletInputStream.onDataAvailable(AbstractServletInputStream.java:198)<br/>
at org.apache.coyote.http11.upgrade.AbstractProcessor.upgradeDispatch(AbstractProcessor.java:96)<br/>
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:669)<br/>
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)<br/>
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)<br/>
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)<br/>
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)<br/>
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)<br/>
at java.lang.Thread.run(Unknown Source)
http://www.websocket.org/echo.htmlでテストを開始すると、接続はエラーで閉じられません。
私にとっては、Tomcat の問題のようです。しかし、それを正しく実行するにはどうすればよいでしょうか?
Tomcat: 8.0.29 (以前のバージョンも)
Windows 7: 64 ビット
プロトコル: HTTP/1.1