从局域网内外使用 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 );
我正在使用 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 );