我一直在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服务器?