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


Websocket port problem because already in use?

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

如何使我的websocket侦听端口80时,Apache服务器已经在监听这个端口?

当我的WebSocket使用端口12345时,我使其工作,但我不想向每个人开放该端口和IANA建议端口80…但我不知道如何让它在那个端口上工作?

想法# 1

我读过Jabber服务器,你可以使用Apache重定向调用。下面是这个网站上的一个例子:

<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协议使用80端口(HTTP)或443端口(HTTPS)。我们所做的是使用端口80作为我们的web服务器和端口443作为websocket。这可以防止冲突,但仍然遵循标准。

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

想想看,如果你要与Apache共享80端口,我该如何选择将消息发送到哪个进程呢?

可以让一个进程监听一个网络接口(比如Apache使用以太网局域网的端口80),另一个进程在另一个接口上使用相同的端口号(比如代理服务器使用无线局域网的端口80)。

我读到Jabber服务器可以使用Apache重定向调用。下面是这个网站上的一个例子:

<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做一些类似的事情…你是怎么想的?