同一台机器上的两个不同浏览器是否可以使用websocket连接到服务器?

时间:2012-11-21 17:54:56

标签: html5 websocket sockjs

我在同一台机器上有两种不同的浏览器(Chrome和Safari)(即相同的IP),并想知道是否可以使用websocket将它们连接到同一台服务器?

我试过了。 Chrome连接正常,但Safari会抛出错误,抱怨:

Error during WebSocket handshake: location mismatch: 
wss://www.mysite.com/sockjs/310/s1a5r_6q/websocket != ws://www.mysite.com/sockjs/310/s1a5r_6q/websocket
sockjs-0.3.js:282Closed transport: websocket SimpleEvent(type=close, code=1006, reason=WebSocket connection broken, wasClean=false)

但我不确定这是否是由于每个IP地址有一个websocket连接的限制?

4 个答案:

答案 0 :(得分:4)

MLister,你似乎遇到了sockjs部署问题。确保sockjs服务器在https上的websocket握手期间返回wss://。这是一些sockjs服务器的一个众所周知的问题 - 服务器并不总是知道页面是通过https提供的,并且在握手期间返回ws://。

例如,sockjs-node使用faye-websocket-node代码来处理这种情况:   https://github.com/faye/faye-websocket-node/blob/master/lib/faye/websocket.js#L40   https://github.com/faye/faye-websocket-node/blob/master/lib/faye/websocket.js#L25-L32

基本上,您必须确保您的负载均衡器设置'x-forwarded-proto'标头。

有意义吗?

答案 1 :(得分:2)

就WebSocket协议而言,没有任何技术限制,尽管规范中有规定限制每个IP地址的未完成连接尝试以防止发送垃圾邮件。只有两个我怀疑你遇到了这个问题。您的websocket服务器可能还有其他可能进一步限制此操作的策略。

答案 2 :(得分:2)

  

wss ://www.mysite.com/sockjs/310/s1a5r_6q/websocket!= ws ://www.mysite.com/sockjs/310/ s1a5r_6q / WebSocket的

这表明websocket连接通过了不理解websocket连接的代理。最有可能的是,它是服务器端的反向代理,从代理后面的服务器卸载SSL开销。代理提供了与客户端的安全连接,但报告了从服务器到客户端的连接的不安全性。那不对。

答案 3 :(得分:1)

当然,至少在浏览器支持WebSocket API的情况下,它是可能的。 您甚至不需要2个不同的浏览器,您可以在多个标签中打开您的网站,例如在Chrome中,它应该可以正常运行。