通过Apache提供的页面访问socket.io服务器

时间:2011-09-12 18:10:38

标签: apache node.js port socket.io

我希望这不是一个非常愚蠢的问题,但我正在学习如何为我的网站实现socket.io服务器来生成实时应用程序,但我的问题是我无法想象如何在Apache服务环境中实现所述应用程序。目前,当我运行node server.js来启动我的socket.io服务器时,我必须通过访问http://localhost:XXXX来访问它,其中XXXX是我附加到它的任何端口,当然。我不希望我的网站被强制在这样的备用端口上查看,但我显然无法将服务器连接到端口80,因为Apache正在监听它。

显然,一个自然的解决方案是停止Apache服务,然后在端口80上节点服务器以避免冲突,但我不想牺牲Apache提供的所有功能。基本上,我想继续通过端口80上的Apache服务我的网站,并通过socket.io在端口3000上集成实时应用程序的某些方面,比如说。

有没有办法做到这一点,避免我不想要的东西?这些事情是1)让用户在URL中使用:3000访问我的网站,2)禁用Apache,3)使用iframe。

提前致谢。

2 个答案:

答案 0 :(得分:3)

通常,您应该能够使用mod_proxy隐藏Node.js.有点搜索出现了这个:https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md(旧链接死了,这是一个新链接)

但是,Socket.io可能有点挑剔(https://github.com/LearnBoost/socket.io/issues/25),因此您可能会遇到问题。

由于这张票有点旧,值得一试。如果您遇到问题,请不要感到惊讶。你接下来的赌注是绑定Node.js toport 80并让它作为Apache https://github.com/nodejitsu/node-http-proxy的反向代理(仍在进行一些开发)。

最佳解决方案是在它自己的服务器上运行它,只是让你的套接字流量转到socket.example.com或类似的东西。

答案 1 :(得分:2)

Socket.io有多种传输机制。如果你运行Apache作为反向代理,它们中的一些不起作用,但有些人会这样做。不起作用的传输是websocket和flash,但是xhr-polling和jsonp-polling应该可以工作。

以下是设置socket.io的传输配置选项的示例:

var io = require("socket.io").listen(server);
io.set("transports", ["xhr-polling", "jsonp-polling"]);

在我的Apache上我使用普通name based virtual hosts and reverse proxy setup并且使用这些传输,socket.io似乎正在工作。