我在同一台机器上有两种不同的浏览器(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连接的限制?
答案 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中,它应该可以正常运行。