我一直在使用Jetty和Java开发一个聊天客户端服务器。但是,我目前在调试代码时遇到了一个奇怪的错误(我不会发布我的代码,因为它是一个更大、更复杂的项目的一部分,除了我之外,我不希望任何人阅读所有这些错误),但是我想知道你们中是否有人遇到了类似的错误,或者知道如何理解它?
每当我试图连接我的客户端时,一旦握手的第一个HTTP请求到达服务器,并且应该继续升级,我就会得到这个错误和握手的结束而不进行任何升级。
从客户端获取的错误消息:
Session Opened:WebSocketSession[websocket=JettyAnnotatedEventDriver[amos.client.unpublic.test.yoko.websocket.AnnotatedSocket@4e33a461],behavior=CLIENT,connection=WebSocketClientConnection@68161ae2{FILLING}{f=Flusher[queueSize=0,aggregateSize=0,failure=null],g=Generator[CLIENT,validating],p=Parser@1c415223[ExtensionStack,s=START,c=0,len=0,f=null,p=WebSocketPolicy@44588a43[behavior=CLIENT,maxTextMessageSize=10000000,maxTextMessageBufferSize=10000000,maxBinaryMessageSize=10000000,maxBinaryMessageBufferSize=10000000,asyncWriteTimeout=60000,idleTimeout=300000,inputBufferSize=4096]]},remote=WebSocketRemoteEndpoint@3f32a8b7[batching=true],incoming=JettyAnnotatedEventDriver[amos.client.unpublic.test.yoko.websocket.AnnotatedSocket@4e33a461],outgoing=ExtensionStack[queueSize=0,extensions=[],incoming=org.eclipse.jetty.websocket.common.WebSocketSession,outgoing=org.eclipse.jetty.websocket.client.io.WebSocketClientConnection]]
2017-05-08T16:53:08.668 DEBUG WebSocketClient@12654428-52 Parsing extra remaining buffer from UpgradeConnection
2017-05-08T16:53:08.668 DEBUG WebSocketClient@12654428-46-selector-WebSocketClientSelectorManager@5e31283d/0 Key interests updated 1 -> 0
2017-05-08T16:53:08.668 DEBUG WebSocketClient@12654428-46-selector-WebSocketClientSelectorManager@5e31283d/0 Local interests updated 1 -> 0 for SelectChannelEndPoint@6fbfc570{localhost/127.0.0.1:5080<->55844,Open,in,out,-,-,300000,WebSocketClientConnection}{io=0,kio=0,kro=1}
2017-05-08T16:53:08.668 DEBUG WebSocketClient@12654428-46-selector-WebSocketClientSelectorManager@5e31283d/0 Running change org.eclipse.jetty.io.SelectChannelEndPoint$1@2810e813
2017-05-08T16:53:08.668 DEBUG WebSocketClient@12654428-46-selector-WebSocketClientSelectorManager@5e31283d/0 FILL_INTERESTED-->FILLING WebSocketClientConnection@68161ae2{FILLING}{f=Flusher[queueSize=0,aggregateSize=0,failure=null],g=Generator[CLIENT,validating],p=Parser@1c415223[ExtensionStack,s=START,c=0,len=0,f=null,p=WebSocketPolicy@44588a43[behavior=CLIENT,maxTextMessageSize=10000000,maxTextMessageBufferSize=10000000,maxBinaryMessageSize=10000000,maxBinaryMessageBufferSize=10000000,asyncWriteTimeout=60000,idleTimeout=300000,inputBufferSize=4096]]}
2017-05-08T16:53:08.668 DEBUG WebSocketClient@12654428-52 terminateConnection(1,002,Unknown opcode: 12)我从RFC 6455上查到了OpCode:
|Opcode | Meaning | Reference |
-+--------+-------------------------------------+-----------|
| 0 | Continuation Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 1 | Text Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 2 | Binary Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 8 | Connection Close Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 9 | Ping Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|
| 10 | Pong Frame | RFC 6455 |
-+--------+-------------------------------------+-----------|但在我的调试中,我不明白OpCode :12的含义。
我认为这与缓冲区中还存在一些数据,并且代码没有正确地接收/解析有关,这仅仅是一个不适当的分段的ping/pong框架吗?它是否来自于我有许多servlet,这会导致会话处理中的冲突?
编辑:我在两边使用(服务器和客户端),我使用的是9.1.5版本。
如果有任何提示或帮助我将不胜感激!非常感谢,一个好奇的程序员学徒。
发布于 2017-06-14 08:01:11
很抱歉出现了延迟,因为在我的处理程序集合中,我有两个处理程序负责响应请求,这导致了这个不正确的分段回答。在分配了正确的路径和一个处理程序之后,它工作了,没有任何问题。
发布于 2017-05-08 16:20:18
当WebSocketClient接收到网络数据时,它继续解析WebSocket帧(RFC6455)。
当它进行操作码解析时,它发现代码为12,这是无效的(每个规范),因此它终止了连接。
https://stackoverflow.com/questions/43851490
复制相似问题