1. 程式人生 > >HTML5 WebSocket使用詳解

HTML5 WebSocket使用詳解

1.使用Eclipse+Tomcat8環境進行演示

2.建立一個Servlet用於接收客戶端的請求資料,並進行處理

[java] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. package com.jCuckoo.server;  
  2. import java.io.IOException;  
  3. import javax.websocket.OnClose;  
  4. import javax.websocket.OnMessage;  
  5. import javax.websocket.OnOpen;  
  6. import javax.websocket.Session;  
  7. import javax.websocket.server.ServerEndpoint;  
  8. /** 
  9.  * 在tomcat7中存在WebSocketServlet類(但已經過時),在tomcat8中徹底刪除 
  10.  * 此處使用@ServerEndpoint註解,主要是將目前的類定義成一個websocket伺服器端 
  11.  * 註解的值將被用於監聽使用者連線的終端訪問URL地址 
  12.  */
  13. @ServerEndpoint(“/websocket”)  
  14. publicclass WebSocketTest {  
  15.     /** 
  16.      * 當伺服器接收到客戶端傳送的訊息時所呼叫的方法 
  17.      * 該方法可能包含一個javax.websocket.Session可選引數 
  18.      * 如果有這個引數,容器將會把當前傳送訊息客戶端的連線Session注入進去
     
  19.      */
  20.     @OnMessage
  21.     publicvoid onMessage(String message,Session session) throws IOException, InterruptedException {  
  22.         // 列印從客戶端獲取到的資訊
  23.         System.out.println(”從客戶端接收到的資訊: ” + message);  
  24.         //向客戶端第一次傳送資訊
  25.         session.getBasicRemote().sendText(”=======向客戶端第一次傳送資訊=======”);  
  26.         //每秒向客戶端傳送一次資訊,連續傳送3次
  27.         int sentMessages = 0;  
  28.         while (sentMessages < 3) {  
  29.             Thread.sleep(1000);  
  30.             session.getBasicRemote().sendText(”即時傳送資訊,當前是第 ” + sentMessages+“次…”);  
  31.             sentMessages++;  
  32.         }  
  33.         // 向客戶端傳送最後一次資訊
  34.         session.getBasicRemote().sendText(”=======向客戶端傳送最後一次資訊=======”);  
  35.     }  
  36.     /** 
  37.      * 當一個新使用者連線時所呼叫的方法 
  38.      * 該方法可能包含一個javax.websocket.Session可選引數 
  39.      * 如果有這個引數,容器將會把當前傳送訊息客戶端的連線Session注入進去 
  40.      */
  41.     @OnOpen
  42.     publicvoid onOpen(Session session) {  
  43.         System.out.println(”客戶端連線成功”);  
  44.     }  
  45.     /** 當一個使用者斷開連線時所呼叫的方法*/
  46.     @OnClose
  47.     publicvoid onClose() {  
  48.         System.out.println(”客戶端關閉”);  
  49.     }  
  50. }  
package com.jCuckoo.server;

import java.io.IOException;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
/**
 * 在tomcat7中存在WebSocketServlet類(但已經過時),在tomcat8中徹底刪除
 * 此處使用@ServerEndpoint註解,主要是將目前的類定義成一個websocket伺服器端
 * 註解的值將被用於監聽使用者連線的終端訪問URL地址
 */
@ServerEndpoint("/websocket")
public class WebSocketTest {
    /**
     * 當伺服器接收到客戶端傳送的訊息時所呼叫的方法
     * 該方法可能包含一個javax.websocket.Session可選引數
     * 如果有這個引數,容器將會把當前傳送訊息客戶端的連線Session注入進去
     */
    @OnMessage
    public void onMessage(String message,Session session) throws IOException, InterruptedException {
        // 列印從客戶端獲取到的資訊
        System.out.println("從客戶端接收到的資訊: " + message);
        //向客戶端第一次傳送資訊
        session.getBasicRemote().sendText("=======向客戶端第一次傳送資訊=======");
        //每秒向客戶端傳送一次資訊,連續傳送3次
        int sentMessages = 0;
        while (sentMessages < 3) {
            Thread.sleep(1000);
            session.getBasicRemote().sendText("即時傳送資訊,當前是第 " + sentMessages+"次...");
            sentMessages++;
        }
        // 向客戶端傳送最後一次資訊
        session.getBasicRemote().sendText("=======向客戶端傳送最後一次資訊=======");
    }
    /**
     * 當一個新使用者連線時所呼叫的方法
     * 該方法可能包含一個javax.websocket.Session可選引數
     * 如果有這個引數,容器將會把當前傳送訊息客戶端的連線Session注入進去
     */
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("客戶端連線成功");
    }
    /** 當一個使用者斷開連線時所呼叫的方法*/
    @OnClose
    public void onClose() {
        System.out.println("客戶端關閉");
    }
}
3.在HTML5 頁面中使用WebSocket與伺服器端進行互動 [html] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>HTML5 WebSocket測試</title>
  5. </head>
  6. <body>
  7.     <div>
  8.         <inputtype=“button”value=“Start”onclick=“start()”/>
  9.     </div>
  10.     <divid=“messages”></div>
  11.     <scripttype=“text/javascript”>
  12.         var webSocket = new WebSocket(‘ws://localhost:8080/WebSocket/websocket’);  
  13.         webSocket.onerror = function(event) {  
  14.             alert(event.data);  
  15.         };  
  16.         //與WebSocket建立連線  
  17.         webSocket.onopen = function(event) {  
  18.             document.getElementById(‘messages’).innerHTML = ‘與伺服器端建立連線’;  
  19.         };  
  20.         //處理伺服器返回的資訊  
  21.         webSocket.onmessage = function(event) {  
  22.             document.getElementById(‘messages’).innerHTML += ’<br/>‘+ event.data;  
  23.         };  
  24.         function start() {  
  25.             //向伺服器傳送請求  
  26.             webSocket.send(‘我是jCuckoo’);  
  27.         }  
  28.     </script>
  29. </body>
  30. </html>
<!DOCTYPE html>
<html>
<head>
<title>HTML5 WebSocket測試</title>
</head>
<body>
    <div>
        <input type="button" value="Start" onclick="start()" />
    </div>
    <div id="messages"></div>
    <script type="text/javascript">
        var webSocket = new WebSocket('ws://localhost:8080/WebSocket/websocket');
        webSocket.onerror = function(event) {
            alert(event.data);
        };
        //與WebSocket建立連線
        webSocket.onopen = function(event) {
            document.getElementById('messages').innerHTML = '與伺服器端建立連線';
        };
        //處理伺服器返回的資訊
        webSocket.onmessage = function(event) {
            document.getElementById('messages').innerHTML += '<br />'+ event.data;
        };
        function start() {
            //向伺服器傳送請求
            webSocket.send('我是jCuckoo');
        }
    </script>
</body>
</html>
4.專案組織結構

5.執行測試結果