我现在使用的代码是:
<!--Socket.io -->
<script src='http://172.16.17.185:3000/socket.io/socket.io.js'></script>
其中,172.16.17.185是运行我的服务器的LAN上的IP地址,端口3000用于socket.io通信。
socket.io网站上的示例使用localhost代替服务器IP地址。我从这开始。使用localhost,我的页面在服务器上正常加载,但是LAN上没有其他PC能够创建套接字对象(因为它试图在其localhost上查找socket.io,但那里没有)。
所以,我将localhost更改为服务器的IP地址,一切正常。
直到,我尝试从外面访问它。由于此IP地址仅在LAN上有效,因此它无法像在互联网上那样工作。
这个问题有解决方法吗?或者我是否需要找到服务器的公共IP并使用它?这是否会为服务器创建任何安全漏洞,因为我没有授权?
中的服务器代码答案 0 :(得分:1)
如果要从LAN外部访问socket.io服务器,必须使用公共IP(并且可能避免使用端口3000)。
在生产环境中,您必须使用前端代理(如nginx)将请求转换为您的socket.io服务器到专用LAN地址。
在nginx blog中的示例后,您可以使用以下内容:
location /socket.io/ {
proxy_pass http://172.16.17.185:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
这不会导致任何安全问题与Internet上任何可公开访问的服务不同。
答案 1 :(得分:1)
查看代码,您使用单独的http实例来提供page和socket.io。如果将其更改为使用相同的http服务器,则可以使用socket.io connection的相对URL。