WebSocket客户端发现服务器

3

我现在遇到这样一个情况:想要我的WebSocket客户端连接到服务器,但是服务器的IP地址或DNS名称是未知的。客户端和服务器都在本地网络中(连接到同一路由器)。我试了这样的方法...

var socket;
for(var i=1; i<255; i++) {
  socket = new WebSocket('ws://192.168.1.'+i+':8080/service');

  socket.onopen = function () {   
    console.log('WebSocket Connected!!');   
  };

  socket.onclose = function (event) {
    console.log('WebSocket Disconnected!!');
    socket.close();
  };

  socket.onmessage = function (event) {
    console.log('WebSocket receive msg: ' + event.data);
  }
}

这个可以运行,但我不确定是否正确或者有更好的方法。非常感谢您提供帮助。

我也在寻找解决方案来做这件事,它发现你的服务器有多快? - Xsmael
我正试图做完全相同的事情,没有人找到了一个好的解决方案吗? - Diego Pamio
2个回答

0

你尝试过挂载一个onerror监听器来查看抛出了哪些错误吗?有可能是你找到了服务器,但是服务器的某些配置导致在连接打开之前出现错误。

WebSockets仍然是一个非常活跃的标准。有多个草案存在,一些浏览器支持其中一些草案,而其他浏览器则不支持。旧的草案通常被认为是不安全的,因此一些浏览器不支持它们,而其他浏览器只支持旧的草案,因为它们还没有更新到新的草案。同样,服务器也可能处于同样的境地。这有点像野西部。

我建议您加入强大的错误处理和当事情不正常时的备用方案。像Socket.io这样的包提供了这种透明的备用支持。如果您正在寻找快速解决方案,我建议您检查一下。然而,如果您只是将其作为学习经验(我鼓励这种行为!),您将需要挂载一个onerror处理程序来查看发生了什么以及每个连接失败的原因。


连接错误会触发onclose事件。在我的情况下,onerror事件从未被调用。 - vinayr

0

当你在一个大于A类网络上部署时,这种解决方案显然无法扩展。而且当网络上有多个websocket服务器时,你就不知道该连接哪一个了。

但只要你的网络没有DNS和静态IP地址,扫描整个IP范围是找到服务器的唯一方法。

你确定不能为服务器分配静态IP地址吗?大多数消费级路由器并不严格执行DHCP的使用,通常只有一些机器配置了静态IP地址时才会出现问题。一些路由器固件还允许配置DHCP服务器始终将特定MAC地址分配给相同的IP地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接