使用socket.io时应该使用哪个端口?

3

当使用socket.io时,我应该监听/发射哪个端口?

我最初在我的SSL网站上使用2053端口,但是在学校使用这个网站后发现2053端口被阻止了。

那么,有没有特定的端口可以使用,保证不会被阻止?还是我应该假设它可能被阻止?

谢谢。


我们需要更多关于您的服务器的信息,它在您的控制下吗?还是您租用了一台服务器?它是否与其他网站托管在同一台服务器上?socket.io是否也用于提供HTML服务? - DrakaSAN
这是一台专用服务器,我拥有完全的控制权。主要网站使用Drupal,但我也运行socket.io来进行简单的实时游戏。 - lombrozo
如果您拥有完全的控制权,那么您应该能够确保端口未被阻止,您可能只是遇到了一个过于热心的杀毒软件或忘记在防火墙中添加例外。我怀疑这不是一个编程问题。 - DrakaSAN
它被客户端阻止了,我的意思是,在学校,他们会阻止他们的出站端口(2053),但我想知道是否有一个他们不太可能阻止的端口...? - lombrozo
1个回答

4
首先,如果您正在使用node.js为您的网站和socket.io连接提供服务,那么通常会使用与您的网站相同的端口号(任何端口号)。由于大多数网站是在80(http)或443(https)端口上提供服务的,因此您将使用它们。由于每个 WebSocket 连接(socket.io所基于的内容)都是从一个 http(s) 请求开始的,它们可以与您的常规 Web 请求共享一个端口,这是 WebSocket 设计的一个核心部分。这也简化了浏览器中的源请求安全性,因为不需要跨源标头支持来连接到与 Web 页面来自同一主机/端口。

对于专业托管的网站,您可能需要参考特定托管公司有关使用 WebSocket 的说明。因为 WebSocekt/socket.io 连接是长时间持续的,它们通常需要在典型的托管环境中获得特定的支持,并且可能需要按特定方式完成。而且,由于托管公司可能会在许多站点之间共享基础设施,因此您通常被指定可以使用的特定端口,而不一定可以自由地使用任意端口。

对于您的学校端连接,只要学校允许在互联网上浏览,端口80和443就会保持开放,因此它们是最安全的选择。

FYI,网站http://portquiz.net/正在监听所有端口上的 http 请求,因此您可以使用它测试任何端口号。

每当我尝试在443端口上监听时,进程就会退出。也就是说,在listen的回调函数中输出“正在监听端口...”,但从未到达该行代码,脚本就会退出... - lombrozo
@lombrozo - 可能是由.createServer().listen()返回的错误代码导致失败,请查看错误信息。 - jfriend00
@lombrozo - 请看我回答中添加的最后一段,其中提供了一种测试从您学校网络发出的连接开放哪些端口的方法。 - jfriend00
有没有办法通过Javascript或类似的方式实时确定哪些端口是开放的? - lombrozo
@lombrozo - 在这个帖子中讨论了各种选项:http://www.wilderssecurity.com/threads/searching-for-outbound-port-scan-utility.99373/. 如果您有一个特定的服务器和端口需要测试,而且该服务器已经启用了跨源浏览器访问,那么也可以从浏览器编写一个快速测试来测试该端口。 - jfriend00

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