04- websoket网络通信

908 阅读1分钟

一、webSoket解析

一、webSoket概念

webSoket 是 一种全双工的网络通信协议允许服务器向客户端主动发送请求

二、. 使用webSoket API
1. 创建一个webSoket对象,参数是URL,注意的是URL是以ws或wss开头的
var ws = new WebSocket("ws://localhost:8080/socket")
2. 发送数据只能发送文本格式 如果是对象也要转成文本
ws.send("我是客户端发送的数据")
3. 通过onopen事件句柄来监听websockets的连接状态:
ws.onopen = function(event){
    //开始通信时的处理
}
4. 通过获取onmessage事件句柄来获取服务端发送过来的数据,
ws.onmessage = function(event){
    console.log(event.data)
}
5. 通过onclose事件句柄来监听websockets的关闭状况
ws.onclose = function(event){
	//关闭时的处理操作
}
6. 关闭websoket
ws.close();
7.查看总websoket状态
ws.readyState == 0

CONNECTING:值为0,代表正在连接;
OPEN:值为1,代表里已经连接;
CLOSING:值为2,代表正在关闭;
CLOSED:值为3,代表已关闭。
三、WebSockets的使用示例
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <h1>websockets简单示例</h1><br>
    <div id="message"></div>
    <div>
        <input type="text" id="sendText">
        <button id="connect" onclick="connect()">建立连接</button>
        <button id="sendData" onclick="sendData()">发送数据</button>
        <button id="closeConnect" onclick="closeConnect()">关闭连接</button>
    </div>
</body>
<script type="text/javascript">
    let websockets;
    //创建一个数组对象用于存放当前的连接的状态,以便在页面上实时展示出来当前的状态
    let statusArr = [
        { state: 0, value: '正在连接' },
        { state: 1, value: '已建立连接' },
        { state: 2, value: '正在关闭连接' },
        { state: 3, value: '已关闭连接' },
    ]
    /**
    *   建立连接
    *
    */
    function connect() {
        // 1. 创建websockets对象,参数为服务器websockets地址
        websockets = new WebSocket("ws:127.0.0.1:7001");

        // 2.监听websocket的状态变化,接收的信息,关闭时的状态

        //监听连接状态的变化
        websockets.onopen = (event) => socketChange();

        //监听接收消息的情况
        websockets.onmessage = (res) => {
            document.querySelector("#message").innerHTML += `<p>接收数据: ${res.data}</p>`
        }

        //监听关闭时的状态变化
        websockets.onclose = (event) => socketChange();
    }
    /**
    *   socket状态变化
    *
    */
    function socketChange() {
        let state = websockets.readyState;
        let val = statusArr.map((item) => {
            if (item.state == state) {
                return item.value
            }
        });

        //实时显示状态的变化
        document.querySelector("#message").innerHTML += `<p>当前的socket连接状态是: ${val}</p>`
    }
    /**
    *   发送数据
    */
    function sendData() {
        //1. 首先获取输入的信息,判断信息是否可以发送
        let val = document.querySelector("#sendText").value;

        if (val == "" || val == undefined) {
            document.querySelector("#message").innerHTML += "<p>发送数据为空,请填写完成后再发送!</p>";
            return;
        }

        websockets.send(val);
        document.querySelector("#message").innerHTML += `<p>发送数据:${val}</p>`;
    }
    /**
    *   关闭连接
    */
    function closeConnect() {
        websockets.close();
    }
</script>

</html>