2012-09-09 115 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地址。