在同一个端口上运行多个服务器

我想在端口80上运行XAMPP服务器和Nodejs服务器。

如果服务器得到一个HTTP请求,那么XAMPP将处理它,如果服务器得到一个WebSocket请求,那么Nodejs

这怎么可能? 如果一个端口已经被使用,那么我不能启动另一个服务器程序。

您需要使用反向代理来执行此操作,例如Apache 2.4。 与mod_proxy_wstunnel 。

将其用作前端,然后将连接隧道到适当的后端。

只有一个进程可以在特定的端口上侦听相同的IP地址和协议,否则操作系统将不知道将接收到的数据包发送到哪个进程。

为了实现你想要的,你将不得不使用反向代理 ,它将监听端口80,并将stream量转发到正确的目的地。 有多种方法可以做到这一点。 例如,您可以设置您的Web服务器(Apache)来转发WebSocket请求,或者您可以configurationNode.js来转发HTTP通信。 研究可用的选项,并select最适合您需求的选项。

与其他人已经提到的反向代理选项一样,您可以将多个IP地址分配给机器。 这可能会花费IPv4(或根本无法使用,取决于您的服务器托pipe在哪里),但是如果您有能力使用IPv6(即,如果连接到一个或两个服务器的人员或您的服务将支持IPv6) 。 这样,两种服务都可以在不同地址的端口80上侦听。

正如你只提到端口80我假设你没有使用HTTPS。 如果你是那么如果使用反向代理选项,你需要或者需要有一个多名称的SSL证书或configurationSNI和生活的事实,一些旧的客户端(IE浏览器,旧的Android版本)将无法连接没有错误。 多地址选项以牺牲需要分配的额外地址为代价来绕过这个问题。