我希望这不是一个非常愚蠢的问题,但我正在学习如何实现一个socket.io服务器为我的网站生产实时应用程序,但我的问题是,我不知道如何在Apache服务环境中实现所述应用程序。 目前,当我运行node server.js
来启动我的socket.io服务器时,我必须通过访问http://localhost:XXXX
来访问它,其中XXXX
是我自己附加的任何端口。 我不希望我的网站被强制在这样的替代端口上查看,但是我明显无法将服务器连接到端口80,因为Apache正在监听这个端口。
显然,一个自然的解决scheme是停止Apache服务,然后在端口80上节点服务器以避免冲突,但是我不想牺牲Apache提供的所有function。 基本上,我想继续通过端口80上的Apache服务我的网站,并通过端口3000上的socket.io实现实时应用程序的某些方面,比方说。
有没有办法做到这一点,以避免我不想要的东西? 这些事情1)有用户访问我的网站:3000
在URL中,2)禁用Apache,3)使用iframes。
提前致谢。
一般来说,你应该可以用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到端口80,并使其作为Apache的反向代理,具有https://github.com/nodejitsu/node-http-proxy (仍然处于开发阶段)。
最佳的解决方案将运行它自己的服务器上,只是你的socket通信流到socket.example.com或类似的东西。
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我使用正常的名称为基础的虚拟主机和反向代理设置,并与这些传输socket.io似乎工作。