如何让我的Node / Socket.io聊天在域上进行通信?

我已经成功地编写了一个非常简单的实时聊天节点JS和Socket.io。 它也使用Express,Jade和Stylus – 我想进一步发展。

目前的代码在这里(这是本地工作): https : //github.com/littlejim84/basic_node_socket

这一切都运行良好,按预期在本地机器上运行。 运行Node应用程序并转到http:// localhost:9000 /使事情按预期工作。 但是,当我把它放在我的远程服务器,套接字没有连接。 我已经设置Ngnix来服务我的Node应用程序,如下所示:

upstream basic_node_socket { server 127.0.0.1:9000; } server { listen 80; server_name example.com; location /basic_node_socket { root /var/www/example.com/basic_node_socket; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://basic_node_socket/; proxy_redirect off; } } 

有了这个,我可以去url,它会服务器上的Node应用程序,如预期的,但套接字只是不会连接。 我假设这是因为现在在客户端,我正在听9000端口,这可能已经没有关系了,现在它被这样的服务?

在我的客户端脚本中,我有这个(本地工作):

 socket = new io.Socket(null, {port: 9000}); 

我不是Node的专家,我正在试图绕过它。 任何人都可以帮助我得到这个按预期在我的远程服务器上工作?

任何帮助将不胜感激。

更新:我已经看到这个链接似乎详细我的问题: http : //community.webfaction.com/questions/3448/using-websockets-with-a-nodejs-custom-app

…这很好,我知道我可能需要一个专用的IP,所以我可以纯粹运行在端口80节点,并有我的域名之一指向该IP(或者我可以使用像Nodestar的东西)。 但是我想把事情放在我自己的VPS上。 这看起来不错,只要我有一个节点应用程序运行。 但是如果我想在这个新的专用IP地址上运行两个或三个Node JS应用程序呢? 这是我不明白的一点。 我已经看到了Node JS的各种虚拟主机types设置,但我不确定如何最好地实现这个干净。

我不确定这是不是你的问题,而没有处理这个第一手,但我的理解是,你不能用nginx代理websockets。 这可能就是为什么你有websockets的麻烦,而不是其他的要求。

尝试使用: https : //github.com/nodejitsu/node-http-proxy

我也听说lighttpd适用于websockets。

至于你使用Socket.IO的错误,如果你在端口80上使用nginx在端口9000上对应应用程序,你将需要告诉客户端使用端口80 NOT端口9000。

你可以用一个简单的proxyTable查找映射来查看node-http-proxy。 将端口80映射到多个站点。

你也可以看看nodester.com,它会为你提供一个node.js的托pipe平台。

您可以运行单个http服务器,并根据请求中的域或其他信息路由请求。 使用这种方法,您可以为在同一服务器上使用相同IP地址的不同域提供完全不同的站点。 可能有一两个模块可以帮助你做到这一点。 对于多个socket.io实例,您可以启动不同端口上的http服务器,并使用它们在同一台计算机上运行所需的多个socket.io实例。