今天看了下websocket的知識,了解到這是html5新增的特性,主要用於實時web的通信。之前客戶端獲取服務端的數據,是通過客戶端發出請求,服務端進行響應的模式,或者通過ajax每隔一段時間從後台發出請求,然後更新頁面的信息,這種輪詢的方式使得用戶感覺頁面是“實時響應”的,這樣做雖然簡單但未免有些暴力,另外每次請求都會有TCP三次握手並且附帶了http頭信息,服務器表示壓力很大,這就造成了性能上和延遲的問題。
後來的技術方案中又出現了長輪詢、Comet、浏覽器插件(flash)和Java等來實現服務器往客戶端推送消息,但都有一些弊端。
WebSocket的出現,意味著另一種解決方案,其提供了基於TCP的雙向的、全雙工(發送數據的同時也能夠接受數據,兩者同步進行)的socket連接。使用websocket,一旦服務端和客戶端之間完成握手,信息就可以隨意往來兩端,而不用附件那些無用的http頭信息,降低了帶寬的占用,提高了性能,降低了延時。但其缺陷是浏覽器的支持不夠,比如IE,到了IE10才支持。
現在就通過一個簡單的例子來講講其運用過程,先上下效果圖:
當然客戶端也可以往服務端發送消息,發送事件便是socket.send(data);data代表發送給服務端的數據:具體代碼如下
(socket.readyState == ($("#txtMsg").val() == "" (!; ($("#userName").val() == "" d = "#userName").val("游客" + d.getMinutes() + "_" + d.getSeconds() + "_" + (!= "" + $("#userName").val() + ":" + "<div class='divChat'>" + $("#txtMsg").val() + "</div>"= "" + $("#userName").val() + " " +"#txtMsg").val(""); $("#txtMsg"
2、服務端的響應
這裡我們添加一般處理程序來進行響應和推送客戶端消息,其中有一點要處理的是 我們要實現即時多人聊天,就要把客戶端發過來的消息廣播到其他客戶端,這裡實現原理也很簡單,就是把所有的連接用list存起來,然後遍歷list集合,將消息發送給各個客戶端。具體實現代碼如下:
List<WebSocket> (WebSocketList == = List<WebSocket> (contexts) =>= (<> buffer = ArraySegment<>( [= clientMessage = Encoding.UTF8.GetString(buffer.Array, (socket.State == clientMessage = DateTime.Now.ToString() + += ArraySegment<> (! (WebSocket item item.SendAsync(buffer, WebSocketMessageType.Text, (socket.State ==
參考資料:使用 HTML5 WebSocket 構建實時 Web 應用
源碼下載
ps:離職了,找工作中……廣州/深圳 圍觀簡歷
喜歡就動動手指支持下!您的支持是我最大動力!