测试客户端是否可以连接到端口80、443、843的WebSockets。

8
我正在运行一个WebSockets应用程序在一个节点服务器上。一切都很好,除了我的应用程序在学校中使用,他们的防火墙显然会阻止端口80上的WebSockets。我读到一些像843这样的端口通常是未被阻止的,但在进行任何转换之前,我想测试一下。
如何测试开放的WebSockets端口?例如尝试从客户端使用端口80、443和843,并报告哪些端口有效?是否有任何教程或代码片段都很好...

好的,一个解决方案是跟踪客户端尝试连接的端口,如果出现错误,则切换端口并尝试另一个端口。您正在使用哪些模块? - Gntem
我随时可以使用任何模块,只是想将其作为实验运行几天/几周并获取数据。我实际上正在寻找一个类似已经完成的教程或代码片段。 - Deepak Joy Cheenath
1
为了最大化WebSocket成功的机会,我建议在标准端口443上使用安全WebSocket(TLS),并使用有效的服务器证书,该证书可被浏览器接受且无需任何用户交互。您可以尝试从学校的一台PC上访问https://demo.crossbar.io/。 - oberstet
@oberstet 感谢您的建议,我将尝试在443端口使用证书进行测试。不幸的是,我无法访问学校,因为它们位于不同的国家。这就是为什么我需要在部署之前进行测试,否则可能会对现有用户造成影响。 - Deepak Joy Cheenath
使用socket.io怎么样?它可以处理很多这种类型的事情,并且被广泛使用。 - John Zwinck
1个回答

7
我一直在使用http://websocketstest.com/来查看我的socket.io websockets的阻塞情况。最近我遇到了一个客户端由于防火墙阻止80端口的流量而无法连接的情况。为了不让他们跳过太多步骤,我现在在443端口上进行监听,这并不需要在该端口上使用SSL。
在nginx中,我首先将所有流量从socket.test.com的80端口重定向到443端口,如下所示:
server {
    listen              80;
    server_name             socket.test.com;
    rewrite             ^ http://test.com:443$request_uri?;
 }

然后
server {
    listen 443;
    server_name  socket.test.com

    location / {
        proxy_pass http://127.0.0.1:3004;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

在3004端口上,一个socket.io服务器正在接受连接。工作正常! 2018年更新:由于letsencrypt.com的帮助,现在可以轻松添加https证书,因此所有这些操作都可以在443端口上进行加密。

谢谢,这很有帮助,应用程序适用于大多数用户。但仍有一些用户无法使用。 - Deepak Joy Cheenath
1
你有检查调试日志吗?如果你弄清楚了情况,请告诉我。我正在开发一个希望能在99%以上的移动浏览器上运行的应用程序。 - Jeroenv3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接