从局域网内外使用 socket.io

Using socket.io from inside and outside LAN

我正在使用 socket.io 进行一个需要我将实时数据流式传输到浏览器的项目。现在服务器部分很好,但是在 socket.io 客户端 io.connect() 调用中,我过去遇到过一些问题,没有得到适当的解决。我已经尝试过通常的嫌疑人,但我没有通过。

我的客户调用如下所示: var socket = io.connect('http://10.95.xx.xx:5002'); 其中 10.95。 .. 是局域网中服务器的IP地址。使用此 IP,我可以从 LAN 内部、LAN 中的任何计算机上访问服务器,但这在 LAN 外部不起作用。问题很可能是这个 IP 仅用于 LAN 而不是 public IP。根据大学的网络设置,public IP 是 128.95 ...如果我将其更改为此 IP,则可以从外部访问它,但不能从内部访问它。

解决此问题的一种方法是,我尝试读取客户端的 IP 地址并根据该地址确定参数 IP。但这感觉并不稳健。另外,我尝试使用 io.connect("/") 。它在以前的情况下对我有用,但这次没有。另外,空调用没有用 io.connect() 没有用。

正如您所说,您可以使用客户端 IP 地址,这对我来说一直有效:

var port = window.location.port,
    host = window.location.hostname,
    protocol = window.location.protocol,
    path = '/',
    url, 
    options = { };

if( protocol.indexOf( 'https' ) > -1 ) {
    protocol = 'wss:';
} else {
    protocol = 'ws:'
}

url = protocol + "//" + host + ":" + port + path;

options = { };

/*
// If you wanted to add an access token, "Session" is where I store this
if( Session.token ) {
   options.query = 'access_token=' + Session.token;
}
*/

socket = io( url, options );