使用 websocket 时的奇怪行为

Posted

技术标签:

【中文标题】使用 websocket 时的奇怪行为【英文标题】:Weird behavior when using websockets 【发布时间】:2016-09-06 14:16:50 【问题描述】:

我写了一个简单的 websocket 服务器/客户端。 服务器使用 C# (System.Net.WebSocks) 编写,客户端是 javascript (尽管服务器技术无关紧要,因为我已经用信号器对其进行了测试,并且在 websocket 传输的握手期间得到了相同的错误)。 问题是:

1- 在某些客户端上,我可以轻松连接到服务器并且运行良好。

2- 在其他一些客户端上,我在握手期间收到 错误代码 1006 在这些客户端中,当我打开 PSiphon 等代理应用程序时,它可以连接到服务器。但是,它会在 大约 6 秒后断开连接。

我真的超级困惑,经过几个小时的尝试,我终于决定在这里提出一个问题。 我觉得和代码无关,不过还是放在这里吧。

    var url = 'ws://' + location.host + '/socket';
    var socket = new WebSocket(url);

更新 1: 我已经联系了系统管理员(托管公司),他们说这可能是因为客户的 ISP。如果是这种情况,我将不胜感激任何提示,以确保是否存在导致问题的某种代理服务器?

更新 2: 正如@vtortola 所说,我创建了一个自签名证书并添加到网站(IIS 和 Plesk)。有一些改进,但仍然断开连接

提前谢谢..

【问题讨论】:

见here 是“有线”还是“怪异”,顺便说一句? 所有测试客户端都在本地主机上吗? 我真的认为没有人可以根据您提供的信息告诉您任何有用的信息。 “在某些客户上”并没有真正的帮助,没有人能看出“某些客户”的区别。 @JeroenvanLangen 不,我已经测试了托管空间(在生产环境中)。 @jAndy 是的,这是可能的,但可能有些人知道一些关于跟踪数据包的技巧,并检查是否有一些代理服务器引起了麻烦。 【参考方案1】:

对我来说,这听起来像是代理问题。使用安全连接 (wss://) 并检查它是否变得更好。基本上,如果您的某些客户端在代理后面,WebSocket 连接可能会以许多意想不到的方式出现异常。

How html5 Web Sockets Interact With Proxy Servers.

【讨论】:

我创建了一个自签名证书并安装在网站上,发生的情况是它现在通过了握手并连接但大约 2 秒后立即断开连接。 如果它确实发生在少数几个人身上,它可能是某种代理杀死连接,因为它认为它们是半死的连接。仍然有一些设备认为 HTTP 连接持续时间比平时长只是某种故障。代理可能在这些客户端的 ISP 网络中,而不是在您的网络中。 谢谢,有没有办法跟踪 websocket 数据包并找出路由中的哪个服务器出现问题。例如,使用“tracert”命令查找其间的所有服务器,然后 ping 单个服务器(使用 websocket)以检查它是否导致问题?

以上是关于使用 websocket 时的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

使用 MFMessageComposeViewController 时的奇怪行为

使用 C 的 getline() 时的奇怪行为

使用两个着色器时的opengl奇怪行为

在模态显示的 UIViewController 中使用 UITableView 时的奇怪行为

发送广播消息时的奇怪行为

核心数据:使用延迟实例化时的奇怪错误行为