WebSocket下的聊天室
websocket是解決客戶端與伺服器端實時通訊而產生的技術。
websocket協議允許在客戶端和服務端之間建立一條雙向傳遞資訊的通道,它是建立在TCP協議之上的,首先通過”握手“來確認和建立通道,之後客戶端和服務端可以通過這個通道傳遞資訊,而不需要再次發起請求,而且客戶端和服務端都可以主動的傳送訊息。這種技術不依賴於HTTP連線(比如XMLHttpRequest,iframe),可以實現實時訊息傳遞。
與Socket區別:
Socket其實並不是一個協議,而是為了方便使用TCP或UDP而抽象出來的一層,是位於應用層和傳輸控制層之間的一組介面。Socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。當兩臺主機通訊時,必須通過Socket連線,Socket則利用TCP/IP協議建立TCP連線。TCP連線則更依靠於底層的IP協議,IP協議的連線則依賴於鏈路層等更低層次。
WebSocket則是一個典型的應用層協議。
Socket是傳輸控制層協議,WebSocket是應用層協議。
WebSocket 客戶端 API :
//建立websocket物件 var ws = new WebSocket(“ws://echo.websocket.org”); //建立連線 ws.onopen = function(){ws.send(“Test!”); }; //收到伺服器訊息,提取 ws.onmessage = function(evt){console.log(evt.data);ws.close();}; //關閉連線 ws.onclose = function(evt){console.log(“WebSocketClosed!”);}; //產生異常 ws.onerror = function(evt){console.log(“WebSocketError!”);}; |
WebSocket 服務端 API :
我們將使用到websocket-api,這個JAR包則在Tomcat的lib下面。
|
聊天室:
伺服器端:
|
客戶端:
|
啟動:
|