HTML5 WebSocket使用详解

1.使用Eclipse+Tomcat8环境进行演示

2.创建一个Servlet用于接收客户端的请求数据,并进行处理

  1. package com.jCuckoo.server;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.websocket.OnClose;  
  6. import javax.websocket.OnMessage;  
  7. import javax.websocket.OnOpen;  
  8. import javax.websocket.Session;  
  9. import javax.websocket.server.ServerEndpoint;  
  10. /** 
  11.  * 在tomcat7中存在WebSocketServlet类(但已经过时),在tomcat8中彻底删除 
  12.  * 此处使用@ServerEndpoint注解,主要是将目前的类定义成一个websocket服务器端 
  13.  * 注解的值将被用于监听用户连接的终端访问URL地址 
  14.  */  
  15. @ServerEndpoint(“/websocket”)  
  16. public class WebSocketTest {  
  17.     /** 
  18.      * 当服务器接收到客户端发送的消息时所调用的方法 
  19.      * 该方法可能包含一个javax.websocket.Session可选参数 
  20.      * 如果有这个参数,容器将会把当前发送消息客户端的连接Session注入进去 
  21.      */  
  22.     @OnMessage  
  23.     public void onMessage(String message,Session session) throws IOException, InterruptedException {  
  24.         // 打印从客户端获取到的信息  
  25.         System.out.println(”从客户端接收到的信息: ” + message);  
  26.         //向客户端第一次发送信息  
  27.         session.getBasicRemote().sendText(”=======向客户端第一次发送信息=======”);  
  28.         //每秒向客户端发送一次信息,连续发送3次  
  29.         int sentMessages = 0;  
  30.         while (sentMessages < 3) {  
  31.             Thread.sleep(1000);  
  32.             session.getBasicRemote().sendText(”即时发送信息,当前是第 ” + sentMessages+“次…”);  
  33.             sentMessages++;  
  34.         }  
  35.         // 向客户端发送最后一次信息  
  36.         session.getBasicRemote().sendText(”=======向客户端发送最后一次信息=======”);  
  37.     }  
  38.     /** 
  39.      * 当一个新用户连接时所调用的方法 
  40.      * 该方法可能包含一个javax.websocket.Session可选参数 
  41.      * 如果有这个参数,容器将会把当前发送消息客户端的连接Session注入进去 
  42.      */  
  43.     @OnOpen  
  44.     public void onOpen(Session session) {  
  45.         System.out.println(”客户端连接成功”);  
  46.     }  
  47.     /** 当一个用户断开连接时所调用的方法*/  
  48.     @OnClose  
  49.     public void onClose() {  
  50.         System.out.println(”客户端关闭”);  
  51.     }  
  52. }  
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与服务器端进行交互

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <title>HTML5 WebSocket测试</title>  
  5. </head>  
  6. <body>  
  7.     <div>  
  8.         <input type=“button” value=“Start” onclick=“start()” />  
  9.     </div>  
  10.     <div id=“messages”></div>  
  11.     <script type=“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" οnclick="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.运行测试结果







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值