Apache服务器上建立多个socket.io/node.js应用程序?(Setting up mu

2019-11-05 03:50发布

我一直在socket.io和node.js的插科打诨最近,并在成功制作一个基于聊天应用程序,我想再拍类似的Web应用程序。 我完成了它,一切工作正常,当我在我的计算机上本地托管,但一旦我把它放在我的Web服务器上停止工作。 节点被服务的页面就好了,但socket.io连接没有正在取得进展。 这是因为,我如何配置我的Apache代理设置,以获得以前的应用程序的工作。 对一些背景资料:

当我完成了第一个程序,我有困难的时候得到的远程服务器上运行。 我正在主持3000端口的应用程序,并试图获得Apache一定URL转发到该端口。 我想http://example.com/app1基本上期待http://example.com:3000 。 我得到这个在添加后发生ProxyPass /app1 http://localhost:3000到Apache的配置文件,并把我在一个类似的情况到什么上述我。 页面加载本身不错,但是是为了socket.io没有实际联系的。 我意识到的问题是,客户一直在寻找在URL socket.io http://example.com/socket.io 。 由于只有子目录/app1被转发到端口3000,这是有意义的是,客户端将无法正常连接到服务器。 为了解决这个问题,我说ProxyPass /socket.io http://localhost:3000/socket.io Apache的配置文件。 因为现在socket.io所有的请求都被发送到相应的端口这基本上解决了这一问题。

这个工作对我罚款,直到我想建立一个不同的端口上的第二个应用程序。 第二个应用程序客户端有地址http://example.com/app2 ,这是又向前到端口的Web服务器上,端口3001这个时候,使用ProxyPass /app2 http://localhost:3001 。 就像我刚才所描述的,页面加载本身罚款,但socket.io连接是不可缺少的。 这个新的客户端页面再次发送所有socket.io请求http://example.com/socket.io 。 正如你猜都来自第二应用的客户端页面的流量被发送到错误的服务器。 我改了口/socket.io被转发到从3000至3001允许第二个应用程序正常运行,但现在的第一个应用程序具有完全相同的问题。

无论我做什么,我不能让客户端的页面请求socket.io要像应用程序的URL下http://example.com/app1/socket.io 。 我可以在客户端页的脚本源极线更改为类似<script src="app1/socket.io/socket.io.js"></script>有或无前导“/”),它仍然不行。 我想,这个问题基本上相当于试图找到一种方法来同时运行两个完全独立的node.js / socket.io服务器。

TL; DR:我怎么能在同一时间同一Apache服务器上运行两个socket.io服务器?

Answer 1:

正如你已经看到的,在默认情况下socket.io启动与相同的URL的所有连接。 你的两个应用程序会,是默认的,可以使用完全相同的网址,因此您的Apache服务器无法分辨哪个是哪个,以代理他们不同。

因此,要解决这个问题的唯一途径是配置socket.io设备(包括客户端和服务器)使用自定义路径,然后可以从默认socket.io路径分别PROXYPASS之一。

您可以构建服务器时所描述的设置服务器路径这里 。

const server = require('http').createServer();

const io = require('socket.io')(server, {
  path: '/myownpath'
});

server.listen(3000);

您可以使客户端连接时所描述的设置客户端请求的路径在这里 。

const socket = io('http://localhost', {
  path: '/myownpath'
});


文章来源: Setting up multiple socket.io/node.js apps on an Apache server?