2

我目前正在使用 JavaScript 中的 WebSockets 遇到这种奇怪的行为,我无法找出原因,这让我发疯了。我希望这里有人可以帮助我找出到底发生了什么。

场景如下:

我有一个带有 Web 服务器 (io.Undertow) 的 Java 应用程序,它通过 HTTP 为连接客户端(在本例中为 Chrome 或 Firefox)提供所需的资源。客户端然后打开到服务器的 WebSocket 连接(相应浏览器的本机 JavaScript Websocket API),服务器启动一个新的 WebSocket 会话 (javax.websocket.Session) 进行通信。然后,在某些特定事件的情况下,服务器通过提到的 WebSocket 连接向连接的客户端通知这些事件,每个事件一条消息。到目前为止,一切都很好...

问题:

当在(重新)建立 WebSocket 连接之后发生此类事件时,服务器按预期正确发送消息,但客户端(Chrome 和 Firefox)似乎以某种方式缓冲传入的消息并且不会触发 onMessage 事件WebSocket API,直到接收到总数据量为 8187 字节。(此外:在我看来,这是一个奇怪的数字;我是否在这里遗漏了一些标头字节?)当突然到达这一点时,所有收到的消息都会立即处理,并且同时为所有这些消息触发 onMessage 事件。之后,连接工作正常,每个事件都会触发 onMessage 事件。

还有一点要提一下:我的两个同事的系统上没有出现这个问题;在他们的系统上,事件从一开始就被正确触发。所以它必须是特定于我的系统的东西。

有谁知道为什么我的系统会发生这种情况?是否有任何系统、防火墙、浏览器、其他设置会以这种方式影响浏览器?

Chrome 提供的标头:

请求标头:

Request URL:ws://127.0.0.1:8080/events
Request Method:GET
Status Code:101 Switching Protocols
Accept-Encoding:gzip, deflate, sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:no-cache
Connection:Upgrade
Cookie:JSESSIONID=...
Host:127.0.0.1:8080
Origin:http://127.0.0.1:8080
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:...
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36

响应标头:

Connection:Upgrade
Content-Length:0
Date:Fri, 27 Mar 2015 09:55:01 GMT
Origin:http://127.0.0.1:8080
Sec-WebSocket-Accept:...
Sec-WebSocket-Location:ws://127.0.0.1:8080/events
Set-Cookie:JSESSIONID=...; path=/
Upgrade:WebSocket

版本信息:

  • 铬版:41.0.2272.101 m
  • 火狐版本:36.0.1
  • 操作系统:Windows 8.1 Pro
  • 同事操作系统:Windows 8.1 Pro / Linux Ubuntu GNOME 14.04.1

提前感谢您的任何建议。

克里斯

4

0 回答 0