是的,websockets是雙向的。一個重要的結果是您可以有效地將數據從服務器推送到客戶端。
底層套接字只是保持打開狀態(如果不能保持打開狀態,需要時重新打開)。請注意,HTTP 1.1還有did that:
HTTP/1.1是原始HTTP(HTTP/1.0)的修訂版。在HTTP/1.0中,一個 請求的每個資源 都會爲同一臺服務器單獨建立連接。 HTTP/1.1可以多次重複使用連接,以便在頁面已發送 後下載 圖像,腳本,樣式表等。 HTTP/1.1通信因此經歷較少的等待時間 ,因爲建立TCP連接呈現相當大的開銷。
它必須同時處理客戶端和服務器端。當然,這意味着兩個軟件都會更新(old browsers,舊服務器無法處理websockets)。
EDIT(以下在評論交流):
客戶端,這裏有一個連接怎麼能夠被初始化
var ws = new WebSocket('ws://'+document.location.host+'/ws');
ws.onopen = function() {
// do something
};
ws.onerror = function() {
// do something
};
ws.onclose = function() {
// do something
};
ws.onmessage = function(msgevent) {
var msg = JSON.parse(msgevent.data);
// handle incoming message
};
你保持WS變量之後,你可以從客戶端推到服務器使用相同的連接與
ws.send(window.JSON.stringify(msg)); // msg is a basic js object
所以,它可以允許推送數據從服務器到客戶端,從客戶端到服務器怎麼樣?既然是雙向的,應該允許這樣做嗎? – GMsoF
當然。我提到了從服務器到客戶端的推送,因爲在websocket協議之前,這很難以標準和有效的方式完成。 –
我看到...但客戶端如何將數據推送到服務器?在Java原始套接字編程中,我知道如何實現這一點。但是,對於Web瀏覽器客戶端如何重用相同的套接字? – GMsoF