Node.js 允许公共IP通过WebSocket连接

Node.js 允许公共IP通过WebSocket连接,node.js,networking,websocket,router,portforwarding,Node.js,Networking,Websocket,Router,Portforwarding,我尝试与nodejs ws(einaros)创建聊天,以下是我的代码: 服务器: var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({ port: 80 }); wss.on('connection', function(ws) { console.log('connecting count:' + wss.clients.length); }); 客户: var hostname = l

我尝试与nodejs ws(einaros)创建聊天,以下是我的代码:

服务器:

var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 80 });
wss.on('connection', function(ws) {
    console.log('connecting count:' + wss.clients.length);
});
客户:

var hostname = location.hostname;
var port = 80;
var url = 'ws://'+hostname+':'+port+'/';
window.WebSocket = window.WebSocket || window.MozWebSocket;
var w = new WebSocket(url);
当我用我的计算机或其他与我的路由器连接的计算机进行测试时,它工作得很好。但是,其他通过互联网访问的客户无法建立连接。当然,他们使用公共IP,比如218.xxx.xxx.xxx,而不是192.168.xxx.xxx

我想知道如何解决这个问题


谢谢你的回答。但是,这可能不是NAT的问题。例如,我的公共IP是218.100.50.50,而我的私有IP是192.168.1.1。当连接来自我的网络外部并访问218.100.50.50:80时,路由器会将其重定向到192.168.1.1:80。有一个网页可以通过这种方式访问,但仍然无法连接到我的websocket服务器。这个问题真的让我很困惑。

坐在IPv4路由器后面会导致将实际流量路由到正确方向的问题(路由器后面的计算机)

您需要将路由器设置中的端口80转发到您的计算机IP。此外,我建议为您的计算机设置路由器设置首选IP,以便在重新启动后更可能不会更改本地IP地址(否则可能会发生)

在这些更改之后,您甚至可以尝试从自己的计算机上使用公共IP进行连接,如果它可以工作,那么它应该可以从外部计算机上工作。

另外,请检查防火墙设置,以确保它不会阻止到端口80的任何外部通信。

您的问题称为NAT:

当一个连接来自您的网络外部(即,针对您的公共IP),路由器不知道谁将接收该连接。想象一下,有3台电脑和2台智能手机连接到你的路由器,哪一台会“应答”?好的,你要做的是告诉路由器:“亲爱的路由器,当我的朋友尝试连接端口80时,将他们重定向到设备192.168.1.37和端口80(例如)”。
如果您不想一次又一次地重新配置路由器以更新192.168.1.37(因为DHCP随机IP分配),请告诉您的路由器始终将相同的IP分配给您的PC(静态IP)


因此,为您的PC配置“静态IP”,并为端口80创建端口转发规则,以将流量重定向到您的服务器。您可以搜索“路由器配置背后的服务器”以了解更多详细信息,这里有数千个教程。

谢谢您的回答。然而,当我设置NAT时,它仍然不起作用。例如,我的公共IP是218.100.50.50,而我的私有IP是192.168.1.1。当连接来自我的网络外部并访问218.100.50.50:80时,路由器会将其重定向到192.168.1.1:80。有一个网页可以通过这种方式访问,但仍然无法连接到我的websocket服务器。这个问题真的让我很困惑。