node.js - 允许公共(public) IP 通过 WebSockets 连接

标签 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 = location.hostname;
var port = 80;
var url = 'ws://'+hostname+':'+port+'/';
window.WebSocket = window.WebSocket || window.MozWebSocket;
var w = new WebSocket(url);

当我用我的电脑或连接到我的路由器的其他电脑进行测试时,它运行良好。但是,其他通过 Internet 访问的客户端无法建立连接。当然,他们使用的是公共(public) IP,例如 218.xxx.xxx.xxx,而不是 192.168.xxx.xxx。

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

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

最佳答案

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

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

在这些更改之后,您甚至可以尝试从您自己的计算机使用公共(public) IP 进行连接,如果它可以工作 - 那么它应该可以从外部计算机进行连接。
此外,检查防火墙设置以确保它不会阻止到端口 80 的任何外部流量。

关于node.js - 允许公共(public) IP 通过 WebSockets 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978903/

相关文章:

javascript - Three.js场景串化失败

java - 寻找 JavaScript 和 Java 之间的简单通信方式

node.js - iOS & node.js : how to verify passed access token?

node.js - Mongoose 架构 : Validating unique field, 不区分大小写

javascript - Google Text-toSpeech - 在前端获取音频文件

networking - 使用winsock扫描局域网游戏服务器

c#检查网络上登录的用户

iphone - 从树莓派连接到 iPhone 热点

ssl - 为什么我的wss ://(WebSockets over SSL/TLS) connection immediately disconnect without giving any errors?

node.js - Node js实时聊天已读或未读状态