Websocket端口问题,因为已经在使用?

Posted

技术标签:

【中文标题】Websocket端口问题,因为已经在使用?【英文标题】:Websocket port problem because already in use? 【发布时间】:2011-07-08 02:29:14 【问题描述】:

根据 IANA 的专家建议,WebSocket 协议默认使用端口 80 进行常规 WebSocket 连接。

当 Apache 服务器已经在监听端口 80 时,如何让我的 websocket 监听端口?

当我的 WebSocket 使用端口 12345 时,我让它工作,但我不想向所有人开放该端口并且 IANA 推荐端口 80...但我不知道如何使它与该端口一起工作?

想法 #1

我已阅读 Jabber 服务器,您可以使用 Apache 重定向呼叫。这是来自this website 的示例:

<VirtualHost *:80>
    Servername yourdomain.com
    DocumentRoot /var/www
    AddDefaultCharset UTF-8
    RewriteEngine On
    RewriteRule ^/http-bind/ http://jabber.yourdomain.com:5280/http-bind/ [P]
</VirtualHost>

也许我可以用 websocket 做类似的事情......你的想法是什么?

【问题讨论】:

【参考方案1】:

你没有。在我所知道的每个操作系统中,规则是一个进程,一个端口。这是有道理的。如果你有两个进程监听同一个端口,那么谁说应该由哪个进程处理呢?您必须在该机器上公开一些其他端口。

【讨论】:

如果 IANA 知道端口 80 将用于网络服务器,为什么还要推荐它? IANA 希望您运行一个支持 websocket 的网络服务器以及正常的 HTTP 请求。不过,据我所知,这些还不存在,所以...... 查看wikipedia 的主题。我特别注意到了这句话,ordinary TCP connections to ports other than 80 are frequently blocked by administrators。这就是为什么大多数人都想使用 80 而你却不愿意的一个很好的理由。 此时我也想使用一个不会被阻塞的端口。这就是为什么我正在寻找一种方法来挂钩端口 80... 嗯,端口 81 通常用作 80 的后备端口。您也许可以通过那个端口。【参考方案2】:

websocket 协议使用端口 80 (HTTP) 或 443 (HTTPS)。我们所做的是为我们的网络服务器使用端口 80,为 websocket 使用端口 443。这样可以防止冲突,但仍然遵循标准。

【讨论】:

【参考方案3】:

你不能。端口号标识网络接口的单个​​端点是套接字库的基本设计原则。如果 Apache 或任何其他程序具有端口 80,则它属于该程序并且仅属于该程序。

想一想,如果您以某种方式与 Apache“共享”端口 80,我该如何选择将消息发送到哪个进程?

可能有一个进程在一个网络接口上侦听(例如 Apache 使用您的以太网 LAN 的端口 80),而另一个进程在另一个接口上使用相同的端口号(例如在您的无线 LAN 上使用端口 80 的代理服务器)。

【讨论】:

【参考方案4】:

我已阅读 Jabber 服务器,您可以使用 Apache 重定向呼叫。这是来自this website 的示例:

<VirtualHost *:80>
    Servername yourdomain.com
    DocumentRoot /var/www
    AddDefaultCharset UTF-8
    RewriteEngine On
    RewriteRule ^/http-bind/ http://jabber.yourdomain.com:5280/http-bind/ [P]
</VirtualHost>

也许我可以用 websocket 做类似的事情......你的想法是什么?

【讨论】:

以上是关于Websocket端口问题,因为已经在使用?的主要内容,如果未能解决你的问题,请参考以下文章

树莓派的 Ratchet Websocket

EADDRINUSE 错误,用于在不同路径上打开 websocket 但在 nodejs 中的相同端口

无法连接到 WebSocket 服务器。不知道为啥

默认情况下可与大多数防火墙一起使用的 Websocket 配置

Nginx 入口控制器 websocket 支持

移动网络中 8080 或 80 端口上的 WebSocket 连接失败