websockets的相对路径

时间:2014-01-11 15:57:07

标签: node.js websocket relative-path relative-url

我在windows server 2012 r2中成功安装了Apache2.2.22和nodejs 0.10.12。

我使用nssm成功地将节点作为Windows服务,因此它将始终运行。

节点“生活”在8000端口,我在apache的httpd.conf中安装了代理,如此

ProxyPass /nodejs http://localhost:8000
ProxyPassReverse /nodejs http://localhost:8000

当我在服务器的浏览器中检查我的网站时,websockets工作正常。

当我在笔记本电脑浏览器中查看我的网站时,出现错误。

我猜它是因为我创建像这样的websockets

 var ci = new WebSocket("ws://localhost:8000");

这就是为什么在服务器上工作,而不是在我的笔记本电脑上。因为localhost。首先,我是对的吗?

二。唯一的问题是,我不知道如何为websockets创建相对路径。我尝试了不同的语法,但没有运气。拜托,有人可以告诉我怎么做,并向我解释一下吗?

提前致谢。

编辑: 我没有设置windows server 2012 r2。一位同事做了。我刚上传了这个网站。我在Windows防火墙中制作了入站规则,因此端口8000已打开。另外,一个用于端口80(用于Apache)。我试过像robertklep建议的东西,没有运气。也许是OS的问题? (安全限制?)

内部httpd.conf我也有

 ProxyPass /geoserver http://localhost:8080/geoserver
 ProxyPassReverse /geoserver http://localhost:8080/geoserver

它在节点的代理之前。它关于Geoserver和8080端口,它也有一个入站规则。工作得很好。

节点仅在本地工作(在URL中有localhost)。在本地,如果我从Proxy删除httpd.conf行,仍然有效。

我不知道如何安装/配置proxy_wstunnel_module。而且我不确定我是否需要它。

我尽我所能,请提供建议

由于

1 个答案:

答案 0 :(得分:8)

第一:是的,你是对的。

第二:我认为WebSocket URL始终必须是绝对的。要动态确定该URL,您可以使用以下内容:

var ci = new WebSocket('ws://' + location.hostname + ':8000');

我假设你没有在端口8000上使用Node服务器来提供HTML文件。如果你是,这可能也有效(并且有点短):

var ci = new WebSocket('ws://' + location.host);