Jetty Websocket,结束会话 OpCode 12
Jetty Websocket, closing session OpCode 12
我一直在使用 Jetty websockets 和 Java 开发聊天客户端-服务器。
然而,我目前在调试我的代码时遇到了一个奇怪的错误(我不会 post 我的代码,因为它是一个更大更复杂的项目的一部分,我不希望任何人阅读它的全部内容, 除了我)
但是我想知道你们有没有遇到类似的错误,或者知道如何理解它?
每当我尝试连接我的客户端时,一旦握手的第一个 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@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 | 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 的含义。
我想这与缓冲区中剩余一些数据和代码不正确 received/parsed 有关,它只是一个不正确的碎片 ping/pong 帧吗?会不会是因为我有很多 servlet,这会导致会话处理发生冲突?
编辑:我在两侧(服务器和客户端)都使用 jetty websocket API,我使用的是 9.1.5 版本。
如有任何提示或帮助,我将不胜感激!
非常感谢,
一个好奇的程序员学徒
WebSocketClient收到网络数据后,开始解析WebSocket Frame (RFC6455)。
当它到达操作码解析时,发现该代码为 12,这是无效的(根据规范),因此它终止了连接。
抱歉耽搁了,
错误是因为在我的处理程序集合中,我有两个处理程序负责回答请求,这导致了这个不正确的碎片化答案。在分配了正确的路径并且只有一个处理程序后,它可以正常工作。
我一直在使用 Jetty websockets 和 Java 开发聊天客户端-服务器。 然而,我目前在调试我的代码时遇到了一个奇怪的错误(我不会 post 我的代码,因为它是一个更大更复杂的项目的一部分,我不希望任何人阅读它的全部内容, 除了我) 但是我想知道你们有没有遇到类似的错误,或者知道如何理解它?
每当我尝试连接我的客户端时,一旦握手的第一个 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@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 | 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 的含义。
我想这与缓冲区中剩余一些数据和代码不正确 received/parsed 有关,它只是一个不正确的碎片 ping/pong 帧吗?会不会是因为我有很多 servlet,这会导致会话处理发生冲突?
编辑:我在两侧(服务器和客户端)都使用 jetty websocket API,我使用的是 9.1.5 版本。
如有任何提示或帮助,我将不胜感激! 非常感谢, 一个好奇的程序员学徒
WebSocketClient收到网络数据后,开始解析WebSocket Frame (RFC6455)。
当它到达操作码解析时,发现该代码为 12,这是无效的(根据规范),因此它终止了连接。
抱歉耽搁了, 错误是因为在我的处理程序集合中,我有两个处理程序负责回答请求,这导致了这个不正确的碎片化答案。在分配了正确的路径并且只有一个处理程序后,它可以正常工作。