2013-02-18 70 views
0

我与Socket.io安装的Node.js这是运行Apache在端口80 我创建了一个插座测试CentOS的服务器,它甫一侦听端口8080上的Node.js和Apache:连接问题

如果我从服务器的shell中curl地址localhost:8080,我得到Socket.io-welcome消息。如果我有这样一行:

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

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

“解决方案”是将代理请求代理到/nodejs/至​​,但此解决方案无法运行很长时间。

当我们安装Apache时,是否可以运行Node.js服务器?必须更改哪些设置才能访问网址:http://server.com:8080?看来Node.js只接受来自本地主机的连接。

+0

阿帕奇可能不出来的现成comaptible使用WebSockets – Mustafa 2013-02-18 18:49:54

+0

也许端口8080是由你封锁防火墙? – udidu 2013-02-18 19:34:02

回答

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

+0

感谢您的回复!不幸的是,它似乎没有办法。我们的服务器位于负载平衡器后面;这会干扰吗?如果我去通过Apache(代理),在Firebug这将输出(回落至XHR轮询前): '“NetworkError:502错误网关 - http://server.com/nodejs/socket.io/1/websocket/ Zp2XXL10rKJALNuKmw6t“ Firefox无法建立到服务器的连接ws:// server/nodejs/socket.io/1/websocket/Zp2XXL10rKJALNuKmw6t' – DavidS 2013-02-18 18:44:00

+0

我不确定负载平衡器。您需要确保端口8080将在任何地方到达您的服务器形式。如果你的节点服务器在'0.0.0.0'上运行,任何能够连接的节点服务器都可以连接到它。在此之后确保您从相应的url(不是本地主机)加载您的.js文件,并确保socket.io代码正确连接。我会在上面更新我的答案来演示。如果这一切都到位,它仍然无法正常工作,我现在很难过:) – 2013-02-18 18:52:52

+0

好吧,我做了这些: 创建一个HTTP子域,并用HAproxy代理请求。由于我们正在从HTT'S'子域连接,因此无法100%工作。出于某种原因,HAproxy没有将套接字数据从套接字发送回客户端,导致超时。套接字是一直在发送数据的日志记录。使用Apache进行代理不起作用。在“HTTPS”子域上创建子子域导致证书警告。证明确定的唯一解决方案是打开负载均衡器中的端口,并连接:https://sub.server.com:8080。谢谢您的意见! – DavidS 2013-02-21 07:45:43