Html 同一台机器上的两个不同浏览器能否同时使用websocket连接到服务器?

Html 同一台机器上的两个不同浏览器能否同时使用websocket连接到服务器?,html,websocket,sockjs,Html,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/

我在同一台机器上有两个不同的浏览器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连接的限制

这当然是可能的,至少如果浏览器支持WebSocket API。
您甚至不需要两种不同的浏览器,您只需在多个选项卡中打开您的站点,例如在chrome中,它应该可以正常工作。

WebSocket协议没有技术限制,尽管规范中有规定限制每个IP地址的未完成连接尝试的速率,以防止垃圾邮件。只有两个我怀疑你会遇到这个问题。不过,您的websocket服务器可能还有其他策略可能会进一步限制这一点

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


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

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

例如,sockjs节点使用faye websocket节点代码来处理这种情况,如下所示:

基本上,您必须确保负载平衡器设置“x-forwarded-proto”头

这有意义吗?

虽然我理解x-forwarded-proto部分,但return request.connection&&request.connection.authorized!==未定义的| | request.socket&&request.socket.secure;,当未设置x-forwarded-proto标头时?当未设置x-forwarded-proto标头时,faye会尽力检测连接是否通过SSL进行,但它只能猜测。此外,只有在您的SSL终止由node.js内部完成,而不是由haproxy、stunnel等完成时,它才能检测到它