0

我已经在 CentOS 服务器上安装了带有 Socket.io 的 Node.js,该服务器在端口 80 上运行 Apache。我创建了一个套接字测试,它只监听端口 8080。

如果我从服务器的外壳中卷曲地址 localhost:8080,我会收到 Socket.io-welcome 消息。如果我有这样的一行:

<script src="http://localhost:8080/socket.io/socket.io.js"></script>

然后浏览器找不到该文件。

一个“解决方案”是将请求代理到/nodejs/to http://localhost:8080/,但这个解决方案并没有工作很长时间。

安装 Apache 后是否可以运行 Node.js 服务器?必须更改哪些设置才能访问 url: http://server.com:8080?似乎 Node.js 只接受来自 localhost 的连接。

4

1 回答 1

1

问题很可能出在您的 node.js 程序中。它应该监听0.0.0.0而不是127.0.0.1仅本地监听。

所以你有类似的东西:

.listen(8080, '127.0.0.1'); // '127.0.0.1' or 'localhost'

您应该将其更改为:

.listen(8080); // or 0.0.0.0

Apache 只有在它也使用端口 8080 时才会干扰,但如果是这种情况,在启动节点应用程序时应该会出错。

此外,如果您http://localhost在浏览器中连接,则仅当服务器与浏览器位于同一本地计算机上时,它才会起作用。我猜对测试很好。

如果您有托管服务器,则必须连接到域或 IP 地址,否则浏览器将找不到它。

更新:您的 socket.io 代码也需要正确连接:

var socket = io.connect('http://correct.server.com:8080'); // not localhost

并且您的浏览器需要从正确的位置加载 javascript 文件:

<script src="http://correct.server.com/socket.io/socket.io.js"></script> // not localhost

这可能有助于解决防火墙/负载平衡器问题:

https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software

于 2013-02-18T18:28:01.077 回答