websocket

1. 简介

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信—— 允许服务器主动发送信息给客户端

webSocket 对象提供了用于创建和管理webSocket连接,以及通过该连接发送和接收数据的API 。
WebScoket的构造器方法接收一个必须的参数和一个可选的参数:

    WebSocket WebSocket(in DOMString url,in optional DOMString  protocols);

    WebSocket WebSocket(in DOMString url,in optional[] DOMString  protocols);
  • url :表示要连接的url,这个url应该为响应WebSocket的地址
  • protocols : 可以是单个协议,也可以是多个协议的名字的字符串数据。这些字符串用来表示自协议,这样可以让一个服务器实现多种WebSocket子协议。如果没有指定这个参数,会默认空字符串。构造方法可能抛出以下异常:
    SECURITY_ERR ==>试图连接的端口被屏蔽。

2. 方法

    void close(in optional unsugned long code,in optional DOMString reason);
    void sent(in DOMString data);

3. 属性

属性名 类型 描述
binaryType DOMString 一个字符串表示被传输二进制内容的类型,取值应当为"blob"或者"arraybuffer","blob"表示使用DOMBlob对象",arraybuffer"表示ArrayBuffer对象
bufferedAmount unsigned long 调用send()方法将多字节数据加入到队列中等待传输,但是还未发出。该值会在所有队列数据被发送后重置为 0。而当连接关闭时不会设为0。如果持续调用send(),这个值会持续增长。只读
extensions DOMString 服务器选定的扩展
onclose EventListener 用于监听关闭事件监听器
onerror EventListener 用于监听错误事件监听器
onmessage EventListener 用于监听消息事件监听器
onopen EventListener 用于监听打开事件监听器
protocol DOMString 一个表明服务器选定的子协议名字的字符串。这个属性的取值会被取值为构造器传入的protocols参数。
readyState unsigned short 连接的当前状态。只读
url DOMString 传入构造器的URL。必须是绝对地址的URL。只读

4. 常量(Ready state)

常量 描述
CONNECTING 0 连接还没开启
OPEN 1 连接开启准备通信
CLOSING 2 连接正在关闭的过程中
CLOSED 3 连接已经关闭,或者无法建立。

5.实例

  • js
$(function(){
    //建立socket连接
    var sock;
    var p1 = "", p2 = "";
    if("https:" == document.location.protocol){
        p1 = "wss://";
        p2 = "https://"
    }else{
        p1 = "ws://";
        p2 = "http://"
    }
    if ('WebSocket' in window) {
        sock = new WebSocket(p1+"<%=basePath%>order_socket");
    } else if ('MozWebSocket' in window) {
        sock = new MozWebSocket(p1+"<%=basePath%>order_socket");
    }
    sock.onopen = function(e) {
        console.log(e);
    };
    sock.onmessage = function(e) {
        //业务逻辑
    toastr.options = {
                  "closeButton": true,
                  "debug": false,
                  "positionClass": "toast-bottom-right",
                  "onclick": order,
                  "showDuration": "43200000",
                  "hideDuration": "43200000",
                  "timeOut": "43200000",
                  "extendedTimeOut": "43200000",
                  "showEasing": "swing",
                  "hideEasing": "linear",
                  "showMethod": "fadeIn",
                  "hideMethod": "fadeOut"
                }
        toastr.clear();
        toastr.info(JSON.parse(e.data));
        }
    };
    sock.onerror = function(e) {
        console.log(e);
    };
    sock.onclose = function(e) {
          sock.close();
    }
    
    /* ajax请求超时解决  */
    $.ajaxSetup({
        
          contentType : "application/x-www-form-urlencoded;charset=utf-8",
          complete: function (XMLHttpRequest, status) {
            var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
            if (sessionstatus == "timeout") {
              // 如果超时就处理 ,指定要跳转的页面
              alert("登录状态过期,将跳转至登录页");
              window.location.href="http://<%=basePath%>login";
            }
          }
        });
    
});
  • Java
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@ServerEndpoint("/websocketTest")
public class WebSocketTest {
    @OnMessage
    public void onMessage(String message, Session session) throws IOException, InterruptedException {

        // Print the client message for testing purposes
        System.out.println("Received: " + message);

        // Send the first message to the client
        session.getBasicRemote().sendText("This is the first server message");

        // Send 3 messages to the client every 5 seconds
        int sentMessages = 0;
        while (sentMessages < 3) {
            Thread.sleep(5000);
            session.getBasicRemote().sendText("This is an intermediate server message. Count: " + sentMessages);
            sentMessages++;
        }

        // Send a final message to the client
        session.getBasicRemote().sendText("This is the last server message");
    }

    @OnOpen
    public void onOpen() {
        System.out.println("Client connected");
    }

    @OnClose
    public void onClose() {
        System.out.println("Connection closed");
    }
}

你可能感兴趣的:(websocket)