我们有一个运行SockJs客户端和服务器端(NodeJs)的SPA。 对于Windows工作站,维护与Windows Azure中部署的服务器的Web套接字连接没有任何问题。 但对于一些使用Mac OS X工作站的同事来说,他们最近几周经常随机断开Web套接字。 在Chrome或Firefox上都会出现,所以它似乎处于较低的操作系统级别。
据他们所知,OS X没有可能影响networking堆栈的更新。 似乎也没有发现SockJs的任何问题。 任何针对OS X的疑难解答提示?
所以我设法借用了我的一个同事的Macbook,并安装了Wireshark。
监视HTTPstream量,我看到预期的websocket升级交换发生, 然后 ,我注意到从服务器发送的TCP级RST重置数据包。 接下来,客户端工作站必须重新启动一个全新的HTTP连接和websocket升级。 最终从服务器中结束了另一个RST。
在试图比较我的Windows工作站上的情况时,我发现networking堆栈会自动将保持活动的ACK数据包每3-5秒发送到服务器 。 看来Mac OSnetworking堆栈并没有意识到已有的HTTP连接已经升级到websocket,因此也不费心提供必要的ACK数据包来通知服务器它还活着。
要在Mac上解决这个问题,我们写了我们的客户端来定期发送“ping”数据来保持websocket连接。