1、客戶端(瀏覽器)實作
(1)webSocket物件
實作WebSocket物件的web瀏覽器通過WebSocket物件公開所有必需的客戶端功能,
創建WebSocket物件
var ws = new WebSocket(url);
//url格式:ws://ip地址:埠號/資源名稱
(2)webSocket事件
webSocket相關的事件,瀏覽器與服務器建立連接、如何接收服務器訊息、如何向服務器發送訊息(這個使用的是webSocket物件中的方法)等事件描述,
| 事件 | 事件處理程式 | 描述 |
|---|---|---|
| open | webSocket物件.onopen | 連接建立時觸發 |
| message | webSocket物件.onmessage | 客戶端接收服務端資料時觸發 |
| error | webSocket物件.onerror | 通信發生錯誤時觸發 |
| close | webSocket物件.onclose | 連接關閉時觸發 |
(3)webSocket方法
| 方法 | 描述 |
|---|---|
| send() | 客戶端向服務器端發送資料時的方法 |
2、服務器端的實作
前提:Tomcat 7.0.5版本后才開始支持WebSocket,
Java WebSocket應用由一系列的WebSocketEndpoint組成,
(1) Endpoint物件
Endpoint是Java中的一個物件,代表WebSocket鏈接的一端(每一個客戶端需要創建一個Endpoint物件)
對于服務器端,Endpoint物件可以看作是處理WebSocket訊息的介面,===類似Servlet與HTTP請求中的Servlet
(2)Endpoint物件的定義
兩種方式定義Endpoint物件,
- 編程式,通過代碼編程,繼承類Javax.websocket.Endpoint并實作其方法;
- 注解式,通過定義一個POJO類,并使用**@ServerEndpoint**相關注解,
Endpoint物件實體在WebSocket握手時創建,并在客戶端與服務端鏈接程序中有效,最后在鏈接關閉時結束,
在Endpoint介面中明確定義了與生命周期相關的方法,
| 方法 | 含義描述 | 對應注解 |
|---|---|---|
| onClose() | 當會話關閉時呼叫 | @Onclose |
| onOpen() | 當開啟一個新的會話時呼叫,該方法是客戶端與服務端握手成功后呼叫的方法 | @OnOpen |
| onError() | 當連接程序中例外時呼叫 | @OnError |
(3)服務端如何接收客戶端發送的資料?
通過為Session添加MessageHandler訊息處理器來接收訊息,
當采用注解方式定義Endpoint時,可以使用**@OnMessage**注解指定接收訊息的方法,
(4)服務器端如何推送資料給客戶端?
服務器向客戶端發送訊息由RemoteEndpoint完成,其實體由Session維護,根據使用情況,可以通過Session.getBasicRemote獲取同步訊息發送的實體,然后呼叫sendXxx()方法就可以發送訊息,可以通過Session.getAsyncRemote獲取異步訊息發送實體,
簡易聊天室服務端代碼實體:
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@ServerEndpoint("\robin")
public class chatEndPoint {
private static Set<chatEndPoint> webSocketSet = new HashSet<chatEndPoint>();
private Session session;
/**
* 接收到客戶端發送過來的訊息時,該方法自動呼叫,
* @param message 接收到的客戶端發送過來的訊息,
* @param session
* @throws IOException
*/
@OnMessage
public void onMessage(String message,Session session) throws IOException {
System.out.println("接收的訊息是:"+message);
System.out.println(session);
//將訊息發送給其他的用戶
for(chatEndPoint chat:webSocketSet){
if (chat != this){
chat.session.getBasicRemote().sendText(message);
}
}
}
/**
* 建立連接時,自動呼叫
* @param session
*/
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this);
}
/**
* 建立關閉時,自動呼叫
* @param session
*/
@OnClose
public void onClose(Session session){
System.out.println("連接關閉了....");
}
/**
* 建立出錯時,自動呼叫
* @param session
*/
@OnError
public void one rror(Session session,Throwable error){
System.out.println("出錯了...."+error.getMessage());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/344176.html
標籤:其他
上一篇:web指紋識別筆記
