使用LAN内外的socket.io

时间:2015-12-08 03:01:43

标签: node.js socket.io real-time

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

我的客户电话看起来像这样: var socket = io.connect('http://10.95.xx.xx:5002'); 哪里10.95。 ..是LAN上服务器的IP地址。使用此IP,我可以从LAN内部,LAN中的任何计算机上访问服务器,但这不适用于LAN外部。问题很可能是,这个IP仅用于LAN,而不是公共IP。根据大学的网络设置,公共IP为128.95 ......如果我将其更改为此IP,则可以从外部访问,但不能从内部访问。

解决此问题的一种方法是,我尝试读取客户端的IP地址,并根据该决定参数IP。但这并不强烈。另外,我尝试使用io.connect("/")。在以前的情况下,它对我有用,但这次没有。此外,空呼叫无效io.connect()无法正常工作。

1 个答案:

答案 0 :(得分:1)

正如你所说,你可以使用客户端的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 );