2014-06-05 135 views
0

我想在一個Chrome擴展中製作一個websocket客戶端,它將偵聽打開的websocket服務器。一旦打開,它將連接並執行其任務。我如何設置它,以便客戶端在斷開連接後立即開始收聽?如何設置websocket服務器偵聽器?

這是我必須連接的代碼,但我不知道如何使它成爲一個監聽器。

function connect(host) { 
    var ws = new WebSocket(host); 

    ws.onopen = function() { 
     alert('connected'); 
     connection = true; 
    }; 

ws.onmessage = function (evt, tab) { 
    if(evt.data == "connect"){ 
     rpwd = 'hello ws'; 
     ports[curTabID].postMessage({text: rpwd}); 
} 
}; 

ws.onclose = function() { 
    alert('socket closed'); 
    connection = false; 
    webConnect('ws://localhost:8080'); 
}; 
}; 
+0

你在瀏覽器中只有一個客戶端,它不能充當服務器。 – vtortola

+0

我知道這要晚得多,但博客文章是在15年8月之後的下個月:http://blog.revathskumar.com/2015/08/websockets-simple-client-and-server.html(它也需要Node.js,比如socket.io) – JakeJ

+0

基本上,瀏覽器的websockets只能監聽一個端口,但是你可以在Node.js中的同一臺機器上運行Javascript,它將服務器放在同一個端口上,來自其他地方的連接,並充當瀏覽器和外部客戶之間的中介。 – JakeJ

回答

1

不幸的是,你不能輕易地做到這一點。

1)標準API,WebSocket,只是一個客戶端,你無能爲力。瀏覽器不應該是一個服務器。

2)擴展應該增加瀏覽器的功能,所以chrome API可能會有幫助。不幸的是,在擴展的情況下,答案仍然是否定的。

3)對於Chrome 應用程序,但是,它可能是。有一個chrome.sockets.tcpServer API,但當然沒有捆綁的服務器實現。您必須自己實施Web + ws服務器,或者使用this one等現有解決方案之一。


那邊,你確定你真的想要一個WS服務器嗎?你說這是爲了「聽取開放的服務器」 - 服務器如何讓他們的存在知道?定期輪詢他們看他們是否公開是否合乎邏輯?

+0

你會如何去做在鉻background.js? –

+0

你讀過我的回答了嗎?請回答我先問的問題。 – Xan

+0

您是否看過我的問題?擴展應該是客戶端,它需要檢查打開的服務器。你在回答中陳述了我的問題,我問我該怎麼做。我還是新手編程,並想知道輪詢web服務器的方法,而不會讓擴展卡在循環中。 –

0

它似乎並不像瀏覽器有任何方式監聽使用WebSockets的連接。我讀過的所有東西,包括socket.io的文檔都指向了node.js,它是唯一的JavaScript方法,或者提供服務器套接字。