我已成功编写了一个非常简单的Node 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;
}
}
有了这个,我可以转到网址,它会像我们预期的那样为我的Node应用程序提供服务,但是socket无法连接。我认为这是因为现在在客户端,我正在收听端口9000,这可能已经没有任何相关性,现在它正以这种方式提供服务?
在我的客户端脚本中,我有这个(在本地工作):
socket = new io.Socket(null, {port: 9000});
我不是Node的专家,我正试图绕过它。任何人都可以帮助我在远程服务器上按预期工作吗?
非常感谢任何帮助。
更新 我看到这个链接似乎详细解释了我的问题:http://community.webfaction.com/questions/3448/using-websockets-with-a-nodejs-custom-app
...这很好,我知道我可能需要一个专用IP,所以我可以纯粹在端口80上运行Node,并让我的一个域名指向那个IP(或者我可以使用像Nodestar这样的东西)。但我想把东西放在我自己的VPS上。这似乎很好,只要我有一个Node应用程序运行。但是,如果我想在新的专用IP地址上运行两个或三个Node JS应用程序呢?这是我不明白的一点。我已经看过Node JS的各种vhost类型设置,但我不确定如何最好地实现它。
答案 0 :(得分:1)
我不确定这是不是你的问题并且没有处理过这个问题,但我的理解是你不能用nginx代理websockets。这可能就是为什么你遇到了websockets而不是其他请求的原因。
尝试使用: https://github.com/nodejitsu/node-http-proxy
我也听说过lighttpd可以使用websockets。
答案 1 :(得分:0)
至于你对Socket.IO的错误,如果你在端口80上使用nginx在端口9000上面对应用程序,你需要告诉客户端使用端口80而不是端口9000。
您可以使用简单的proxyTable查找映射查看node-http-proxy。将端口80映射到多个站点。
您还可以查看nodester.com,它将为您提供node.js托管平台。
答案 2 :(得分:-1)
您可以运行单个http服务器,并根据请求中的域或其他信息路由请求。使用此方法,您可以为在同一服务器上使用相同IP地址的不同域提供完全不同的站点。可能有a module or two可以帮助您解决此问题。对于多个socket.io实例,您可以在不同的端口上启动http服务器,并使用它们在同一台机器上运行所需数量的socket.io实例。