1. 程式人生 > >websocket 服務端

websocket 服務端

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(在每個方法中都可以根據需要傳入對應的引數)。