我希望这不是一个非常愚蠢的问题,但我正在学习如何为我的网站实现一个socket.io服务器来生成实时应用程序,但我的问题是,我不知道如何在Apache服务的环境中实现这些应用程序。目前,当我运行node server.js来启动我的socket.io服务器时,我必须通过访问http://localhost:XXXX来访问它,自然地,XXXX是我附加到的任何端口。我不希望我的网站被强制在这样的备用端口上查看,但我显然不能将服务器连接到端口80,因为Apache正在监听该端口。
显然,一种自然的解决方案是停止Apache服务,然后在端口80上为服务器添加节点,以避免冲突,但我不想牺牲Apache提供的所有功能。基本上,我想继续在端口80上通过Apache为我的网站提供服务,并在端口3000上通过socket.io集成实时应用程序的某些方面。
有没有办法避免我不想要的东西?这些是1)让用户在网址中使用:3000访问我的网站,2)禁用Apache,3)使用iframe。
提前谢谢。
发布于 2011-09-13 12:11:40
通常,您应该能够使用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),因此您可能会特别使用它时遇到问题。
那张票有点旧了,值得一试。如果你有问题,不要感到惊讶。在此之后,您的下一个目标是使用https://github.com/nodejitsu/node-http-proxy绑定ApacheTopor80,并将其用作Node.js的反向代理(仍处于相当多的开发阶段)。
最好的解决方案是在它自己的服务器上运行它,让你的socket流量转到socket.example.com或类似的地方。
发布于 2012-08-17 07:23:34
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似乎可以正常工作。
https://stackoverflow.com/questions/7392024
复制相似问题