在收到一定数量的数据之前,不会触发JavaScript WebSocket onMessage事件

时间:2015-03-27 10:25:55

标签: windows java-ee websocket wildfly undertow

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

方案如下:

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

问题:

当(重新)建立WebSocket连接后发生此类事件时,服务器会按预期正确发送消息,但客户端(Chrome和Firefox)似乎以某种方式缓冲传入的消息并且不会触发WebSocket API的onMessage事件,直到收到总数据量为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

版本信息:

  • Chrome版本:41.0.2272.101 m
  • Firefox版本:36.0.1
  • 操作系统:Windows 8.1 Pro
  • 同事的操作系统:Windows 8.1 Pro / Linux Ubuntu GNOME 14.04.1

提前感谢任何建议。

克里斯

0 个答案:

没有答案