Websockets 不能在至少一台机器上工作
Posted
技术标签:
【中文标题】Websockets 不能在至少一台机器上工作【英文标题】:Websockets not working on at least one machine 【发布时间】:2016-08-13 21:35:33 【问题描述】:我有一个使用 websockets 的应用程序。 Web 服务器是 glassfish 4.1.1,我们在服务器端使用 @ServerEndpoint 实现 websockets。
到目前为止,在所有计算机上一切正常,当在某个客户的一台笔记本电脑上出现错误时(他使用 Google Chrome):
在 websocket 上执行“发送”失败:仍处于 CONNECTING 状态
在该计算机上,此错误永久出现,阻塞了与 websockets 相关的所有功能。
我们不为 websocket 设置特定端口。所以我假设他们使用的是默认值 - 80。其他页面已成功加载(因此,我们的网站可以从那台笔记本电脑访问)。
你有什么可以挖掘的钥匙吗?为什么只有一台笔记本电脑出现故障? 是否需要提供更多信息?
提前谢谢你!
【问题讨论】:
【参考方案1】:可能有很多东西:
防火墙 防病毒 Chrome 标志(如运行:chrome.exe --disable-web-sockets) 病毒/恶意软件 中间人 (MitM)我建议安装 Firefox。如果 Firefox 没有问题,那么 Chrome 肯定有问题。
【讨论】:
防火墙或防病毒软件是否可以阻止 websockets,即使它们使用 80 端口?我不能在那台机器上安装我能安装的所有东西。有一些解决方法吗?可能要替换 websockets? 一些反病毒过滤来自 80 端口的内容,甚至阻塞或关闭你的套接字。好吧,如果您想替换 websockets,请更改您的代码以使用 Comet 技术。 感谢您的回答。看来问题出在代理上。 Websockets 无法在代理后面连接。我在那台机器上使用websocketstest.com 找到了它。 我明白了,如果代理在处理数据包,我们可以说它是一种中间人。 ;)【参考方案2】:我遇到了同样的问题。检查您尝试从前端应用程序连接的端口是什么(您的套接字必须分配给一个端口)。我的 WS 服务器正在侦听 8080 端口,一些用户的传出端口被阻止。我做了一个从 80 到 8080 的代理,现在所有用户都可以访问。
【讨论】:
以上是关于Websockets 不能在至少一台机器上工作的主要内容,如果未能解决你的问题,请参考以下文章
XSockets / WebSockets 无法从主机以外的其他机器访问
执行 Select-AzureRmSubscription 可以从我的一台(客户端)机器上运行,但不能在另一台机器上运行
为啥 django sqlite3 数据库在一台机器上与另一台机器上的工作方式不同?