国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

HTML5基于Tomcat 7.0實現WebSocket連接并實現簡單的實時聊天

2019-11-20 08:37:39
字體:
來源:轉載
供稿:網友

1、什么是WebSocket?

WebSocket 是一種自然的全雙工、雙向、單套接字連接。使用WebSocket,你的HTTP 請求變成打開WebSocket 連接(WebSocket 或者WebSocket over TLS(TransportLayer Security,傳輸層安全性,原稱“SSL”))的單一請求,并且重用從客戶端到服務器以及服務器到客戶端的同一連接。WebSocket 減少了延遲,因為一旦建立起WebSocket 連接,服務器可以在消息可用時發送它們。例如,和輪詢不同,WebSocket只發出一個請求。服務器不需要等待來自客戶端的請求。相似地,客戶端可以在任何時候向服務器發送消息。相比輪詢不管是否有可用消息,每隔一段時間都發送一個請求,單一請求大大減少了延遲。

2、WebSocket API

WebSocket API 使你可以通過Web,在客戶端應用程序和服務器端進程之間建立全雙工的雙向通信。WebSocket 接口規定了可用于客戶端的方法以及客戶端與網絡的交互方式。

3、WebSocket構造函數

為了建立到服務器的WebSocket連接,使用WebSocket接口,通過指向一個代表所要連接端點的URL,實例化一個WebSocket對象。WebSocket 協議定義了兩種URL方案(URL scheme)―ws和wss,分別用于客戶端和服務器之間的非加密與加密流量。

實例:var ws = new WebSocket("ws://www.websocket.org");

4、WebSocket事件

WebSocket API 是純事件驅動的。應用程序代碼監聽WebSocket對象上的事件,以便處理輸入數據和連接狀態的改變。WebSocket協議也是事件驅動的。

WebSocket對象調度4個不同的事件:

A、open事件:

一旦服務器響應了WebSocket連接請求,open事件觸發并建立一個連接。open事件對應的回調函數稱作onopen

實例:

ws.onopen = function(e) {console.log("Connection open...");};

B、messagess事件:

message事件在接收到消息時觸發,對應于該事件的回調函數是onmessage。

實例:

ws.onmessage = function(e) {if(typeof e.data === "string"){console.log("String message received", e, e.data);} else {console.log("Other message received", e, e.data);}};

C、error事件:

error 事件在響應意外故障的時候觸發。與該事件對應的回調函數為onerror。
實例:

ws.onerror = function(e){console.log('websocked error');handerError();}

D、close事件:

close 事件在WebSocket 連接關閉時觸發。對應于close 事件的回調函數是onclose。

實例:

ws.onclose = function(e) {console.log("Connection closed", e);};

5、WebSocket方法

WebSocket 對象有兩個方法:send() 和close()。

A、 send() 方法:

使用WebSocket在客戶端和服務器之間建立全雙工雙向連接后,就可以在連接打開時調用send() 方法。使用send() 方法可以從客戶端向服務器發送消息。在發送一條或者多條消息之后,可以保持連接打開,或者調用close() 方法終止連接。

實例:

ws.send("Hello WebSocket!");

B、close ()方法:

使用close()方法,可以關閉WebSocket連接或者終止連接嘗試。如果連接已經關閉,該方法就什么都不做。在調用close()之后,不能在已經關閉的WebSocket上發送任何數據。可以向close()方法傳遞兩個可選參數:code(數字型的狀態代碼)和reason(一個文本字符串)。傳遞這些參數能夠向服務器傳遞關于客戶關閉連接原因的信息。

注:以上是對 WebSocket的簡單介紹,下面將用一個簡單的網頁實時聊天案例來介紹如何使用WebSocket

A:首先新建一個項目我這里叫chatroom,在建一個包然后新建一個類用于實現服務器端的連接我的類名叫ChatWebSocketServlet.Java;

具體項目搭建如下圖:

這里寫圖片描述 

B:寫服務器端實現類ChatWebSocketServlet.java,具體代碼如下:

package com.yc.chat.Servlet;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Set;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServletRequest;import org.apache.catalina.websocket.MessageInbound;import org.apache.catalina.websocket.StreamInbound;import org.apache.catalina.websocket.WebSocketServlet;import org.apache.catalina.websocket.WsOutbound;@WebServlet("/chat")public class ChatWebSocketServlet extends WebSocketServlet {private final Map<Integer, WsOutbound> map = new HashMap<Integer, WsOutbound>();private static final long serialVersionUID = -1058445282919079067L;@Overrideprotected StreamInbound createWebSocketInbound(String arg0, HttpServletRequest request) {// StreamInbound:基于流的WebSocket實現類(帶內流),應用程序應當擴展這個類并實現其抽象方法onBinaryData和onTextData。return new ChatMessageInbound();}class ChatMessageInbound extends MessageInbound {// MessageInbound:基于消息的WebSocket實現類(帶內消息),應用程序應當擴展這個類并實現其抽象方法onBinaryMessage和onTextMessage。@Overrideprotected void onOpen(WsOutbound outbound) {map.put(outbound.hashCode(), outbound);super.onOpen(outbound);}@Overrideprotected void onClose(int status) {map.remove(getWsOutbound().hashCode());super.onClose(status);}@Overrideprotected void onBinaryMessage(ByteBuffer buffer) throws IOException {}@Overrideprotected void onTextMessage(CharBuffer buffer) throws IOException {String msg = buffer.toString();Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");msg = " <font color=green>匿名用

主站蜘蛛池模板:
陈巴尔虎旗|
禄丰县|
万年县|
二连浩特市|
天柱县|
汤原县|
福清市|
衡阳县|
博乐市|
吉水县|
德阳市|
化州市|
正宁县|
探索|
梓潼县|
万山特区|
思茅市|
建瓯市|
台江县|
涿州市|
内黄县|
耿马|
义乌市|
泸溪县|
二手房|
塔河县|
蚌埠市|
平潭县|
宽甸|
临湘市|
东平县|
普陀区|
新巴尔虎右旗|
达拉特旗|
当雄县|
平泉县|
通榆县|
通城县|
上思县|
青铜峡市|
武功县|