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 数据库在一台机器上与另一台机器上的工作方式不同?

Google表格API Java程序可在一台机器上运行,而不是另一台机器--401 Au

如何在不同的机器上使用 java websockets?

php函数file_exits,copy,shell_exec不在一台机器上工作,但相同的代码在不同的机器上工作