適合初學者的websocket示例

通過websocket,前後臺只要建立一次連接,後臺就可以不停的向前臺推送消息。擺脫了前臺一遍遍輪詢的煩惱,其樂無窮~~

這裏就是一個簡單的websocket實現沒什麼高深的技能,適合初學者。

前臺js:


var websocket = null;
$(function(){
    var params = "參數";
    var ip = '165.152.0.1:8080';     //websocket服務器的地址
    var path = "/WS/test/"+params;        //項目路徑+參數
    var uri= location.protocol ==='https:' ? 'wws://' : 'ws://';
    var url = uri + ip + path;

    if('WebSocket' in window){   //判斷瀏覽器是否支持websocket
        websocket = new ReconnectingWebSocket(url);
        websocket.debug=true;
    }else{
        alert('瀏覽器不支持websocket!');
    }

    //連接錯誤的回調方法
    websocket.onerror = function() {
	    console.log('websocket連接出錯!');
    }

    //連接成功的回調方法
    websocket.onopen = function() {
	    console.log('websocket連接成功!');
    }

    //連接關閉的回調方法
    websocket.onclose = function() {
	    console.log('websocket連接關閉!');
    }

    //接收到消息的回調方法
    websocket.onmessage = function(event){
        var data = event.data;
        console.log('websocket服務器推送的數據:'+data);
    } 

    //當窗口關閉時,主動去關閉websocket連接
	window.onbeforeunload = function() {
	    websocket.close();
	}
});

//發送數據
function send(){
    var mes = "要發送的數據";
    websocket.send(mes);
}

websocket服務器:新建一個Javaweb項目,

/**
 * @ServerEndpoint 註解是一個類層次的註解,它的功能主要是將目前的類定義成一個websocket服務器端,
 * 註解的值將被用於監聽用戶連接的終端訪問URL地址,客戶端可以通過這個URL來連接到WebSocket服務器端
 * {userName}傳遞參數
 */
@ServerEndpoint("/test/{userName}")
public class WebSocketServer {
	static Map<Session, String> map = new HashMap<Session, String>();

    @OnOpen
    public void OnOpen(@PathParam("userName")String userName,Session session) {
    	System.out.println(userName);
    	map.put(session, userName);
        System.out.println("OnOpen()方法被執行...");
        System.out.println("websocket連接建立成功...");
    }

    /**
     * 連接關閉的方法
     */
    @OnClose
    public void OnClose(Session session) {
    	if (map.containsKey(session)) {
    		map.remove(session);
       }
        System.out.println("OnClose()方法被執行...");
        System.out.println("websocket連接已經關閉...");
    }

    /**
     * 接收消息的方法
     * @param msg
     * @param session
     * @throws InterruptedException 
     */
    @OnMessage
    public void OnMessage(String msg, Session session) throws InterruptedException {
        System.out.println("已從客戶端接收消息:" + msg);

        System.out.println("向客戶端發送數據完畢...");
    }

	/**
     * 出錯的方法,注意參數不能錯
     * @param session
     * @param error
     */
    @OnError
    public void OnError(Session session,Throwable error) {
    	if (map.containsKey(session)) {
    		map.remove(session);
		}
        System.out.println("OnError()方法被執行...");
        System.out.println("websocket出錯...");
    }
    
    /**
     * 推送數據的方法
     * @param session map裏存的登錄信息
     * @param message 推送數據
     */
    public void sendMessage(Session session,String message){
		try {
			session.getBasicRemote().sendText(message);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}

我這裏的websocket服務器是jdk1.7 Tomcat7,別的服務器好像是有問題。

websocket需要的jar包:https://download.csdn.net/download/qq_39731741/10721221

無意中發現一篇文章,也是講websocket的,感覺比我的簡潔,你們可以看一下:https://blog.csdn.net/liu857279611/article/details/70157012

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章