У меня довольно сложное приложение на основе веб-сокета, работающее на современном сервере Tomcat 8.
Через довольно случайные интервалы я получаю это исключение, одновременно для всех подключенных пользователей.
java.lang.IllegalArgumentException
at java.nio.Buffer.limit(Buffer.java:275)
at org.apache.tomcat.websocket.PerMessageDeflate.sendMessagePart(PerMessageDeflate.java:377)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:284)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:258)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialBytes(WsRemoteEndpointImplBase.java:161)
at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendBinary(WsRemoteEndpointBasic.java:56)
at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendBinaryMessage(StandardWebSocketSession.java:202)
at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:105)
at org.infpls.royale.server.game.session.RoyaleSession.sendImmiediate(RoyaleSession.java:69)
at org.infpls.royale.server.game.session.SessionThread.run(SessionThread.java:46)
После создания этого исключения веб-сокет остается в состоянии PARTIAL_WRITING и отключается при следующей попытке записи.
Я видел, как это произошло через 15 минут после запуска Tomcat, и я видел, как это произошло после простоя на сервере в течение 8 часов. Я не могу найти никакой связи с тем, что пользователи делают на сервере, и когда выдается это исключение.
Проблема, кажется, происходит довольно глубоко в Spring / Java NIO-коде, и я не уверен, как это отладить.
Любая помощь будет принята с благодарностью!