从局域网内部和外部使用socket.io

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

我的客户端调用如下所示: var socket = io.connect('http://10.95.xx.xx:5002'); 10.95。 ..是局域网上服务器的IP地址。 使用这个IP,我可以在局域网内的任何一台机器上访问局域网内的服务器,但这不能从局域网外部工作。 问题很可能是这个IP只用于局域网而不是公用IP。 根据大学的networking设置,公共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 );