websocket 服務端
阿新 • • 發佈:2019-01-26
1、引入 tyrus-standalone-client-1.13.1.jar 包
2、
import java.io.IOException;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
//value為請求的url
@ServerEndpoint(value="/TestWebsocketServer/{sid}/{name}")
public class TestWebsocketServer {
/**
* 建立連線時觸發該方法
* @param sid
* @param name
* @param session
*/
@OnOpen
public void onOpen(@PathParam("sid") String sid, @PathParam("name") String name, Session session){
System.out.println("建立websocket連線,客戶端id為" + sid + ",名稱為 " + name);
//給客戶端傳送資訊
try {
session.getBasicRemote().sendText("已建立websocket連線");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 接收到客戶端的資訊時觸發
* @param message
* @return
*/
@OnMessage
public void onMessage(String message) {
System.out.println("接收到客戶端資訊為 " + message);
}
/**
* 發生異常時觸發該方法
* @param throwable
*/
@OnError
public void onError(Throwable throwable) {
System.out.println("連線發生異常 " + throwable.getMessage());
}
/**
* 關閉連線時觸發
* @param sid
* @param name
*/
@OnClose
public void onClose(@PathParam("sid") String sid, @PathParam("name") String name) {
System.out.println("關閉websocket連線,客戶端id為" + sid + ",名稱為 " + name);
}
}
3、另外我們可以建立一個公共的map集合,將所有建立的websocket的session儲存到該集合,方便服務端統一發送資料給所有客戶端。在onOpen的時候將session儲存到該集合,在onError和onClose方法觸發的時候將對應的session從map集合中remove(在每個方法中都可以根據需要傳入對應的引數)。