2012-09-09 117 views
3

我在我希望我的websocket客户端连接到服务器但服务器IP或DNS名称未知的情况。客户端和服务器都在本地网络中(连接到相同的路由器)。我想是这样的....websocket客户端发现服务器

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

我还在寻找解决方案来做到这一点,它发现你的服务器有多快? – Xsmael

+0

我试图做同样的事情,没有人找到这种情况的一个很好的解决方案? –

回答

0

你试过挂钩的onerror监听器来查看正在抛出什么样的错误?您可能找到了服务器,但服务器中的一些错误配置导致它在连接打开之前出错。

的WebSockets仍然是一个非常积极发展的标准。有多个草稿,一些浏览器支持一些草稿,但不支持其他草稿。旧版草稿通常被认为是不安全的,因此一些浏览器不支持它们,而其他浏览器仅支持旧草稿,因为它们尚未更新。另外,服务器可能在同一条船上。这是一个狂野的西部。

我建议把在可靠的错误处理和当事情不工作的权利也回退。像Socket.io这样的软件包提供了这种透明的后备支持。如果您正在寻找快速解决方案,我建议您检查一下。但是,如果您只是将其用作学习体验(并且我鼓励这种行为!),那么您需要连接一个onerror处理程序以查看发生了什么以及每个连接失败的原因。当你部署一个网络比A类产品。而当有网络上的多个WebSocket伺服器,你不会不知道打哪一个更大的

+0

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

0

该解决方案当然会扩展可怕。

但只要没有DNS和网络上没有静态IP地址,端口扫描整个IP范围是找到服务器的唯一途径。

你肯定是不可能的静态IP地址分配给服务器的机器?大多数消费级路由器不严格执行DHCP的使用,并且通常当只有一些机器配置有静态IP地址时,这不是问题。某些路由器固件还允许配置DHCP服务器始终将相同的IP地址分配给特定的MAC地址。