【发布时间】:2017-05-08 15:24:28
【问题描述】:
我一直在使用 Jetty websockets 和 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,这会导致会话处理发生冲突吗?
编辑:我在双方(服务器和客户端)都使用 jetty websocket API,我使用的是 9.1.5 版本。
如果有任何提示或帮助,我将不胜感激! 非常感谢, 一个好奇的程序员学徒。
【问题讨论】:
-
请求澄清:您在客户端和服务器两端都使用Jetty WebSocket吗?
-
我的错,我应该更准确。是的,我在两边都使用了 jetty API(准确地说是 9.1.5 版本)
-
所以显示的错误来自客户端,您在服务器端看到什么了吗?
-
在服务器端,没有更多信息,我在会话关闭前调试得到的唯一信息是:2017-05-08T17:40:27.591 DEBUG Idle pool thread Disconnected: 127.0 .0.1 (127.0.0.1) (statusCode= 1,002 , reason=Unknown opcode: 12)
-
如果是系统性的,没有人想出好主意,如果您能隔离问题并分享mvce,那就太好了
标签: java websocket jetty chat opcode