我处于这样一种情况,我希望我的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);
}
}
这有效,但我不确定我做得对,还是有更好的方法。任何帮助表示赞赏。
答案 0 :(得分:0)
您是否尝试连接onerror
侦听器以查看正在抛出的错误?您可能正在找到服务器,但服务器中的某些错误配置导致它在连接打开之前出错。
WebSockets仍然是一个非常活跃的标准。有多个草稿,有些浏览器支持一些草稿而不支持其他草稿。旧草稿通常被认为是不安全的,因此一些浏览器不支持它们,而其他浏览器仅支持旧草稿,因为它们尚未针对较新的草稿进行更新。此外,服务器可能在同一条船上。这是狂野的西部。
我建议进行强大的错误处理,并在事情无法正常工作时进行回退。像Socket.io这样的软件包提供了这种透明的后备支持。如果您正在寻找快速解决方案,我建议您查看一下。但是,如果您只是将其用作学习体验(并且我鼓励这种行为!),您将需要连接onerror
处理程序以查看正在发生的事情以及每个连接失败的原因。
答案 1 :(得分:0)
当您在大于A类的网络上进行部署时,此解决方案当然会非常可扩展。当网络上有多个websocket服务器时,您将无法知道要触及哪个。
但只要您的网络上没有DNS且没有静态IP地址,端口扫描整个IP范围是查找服务器的唯一方法。
您确定无法为服务器计算机分配静态IP地址吗?大多数消费级路由器并不严格强制使用DHCP,并且通常只有部分计算机配置了静态IP地址时才会出现问题。某些路由器固件还允许将DHCP服务器配置为始终为特定MAC地址分配相同的IP地址。