# WebSockets

WebSockets 是一个可以创建和服务器间进行双向会话的高级技术。通过这个API你可以向服务器发送消息并接受基于事件驱动的响应,这样就不用向服务器轮询获取数据了。

# 为什么需要WebSocket

客户端与服务端通信一般采用 http 协议,但是 http 协议有一个缺陷:通信只能由客户端发起。这种单向请求的特点,导致服务器如果连续发生变化,客户端只能用轮询或者 long pull 的方式去获取,这样效率很低,非常浪费资源。

WebSocket 最大的特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务端发送信息,是真正的双向平等对话。

# 基本使用

    const socket = new WebSocket('ws://localhost:8080');

    socket.addEventListener('open', function (event) {
        socket.send('Hello Server!');
    })

    socket.addEventListener('message', function (event) {
        console.log('Message from server', event.data);
    })

    socket.addEventListener('close', function (event) {
        console.log('Connection closed');
    })

    socket.addEventListener('error', function (event) {
        console.log('error')
    })

# 轮训 && long pull

轮询 即让浏览器每隔一段时间发送一次请求,询问服务器有没有新信息, long pull 也是采用轮询的方式,不过采用的是阻塞模型,即客户端发起请求后,如果没有信息,就一直不返回 response ,直到有信息后才返回,返回完后,客户端再次建立连接。


WebSocket 教程 (opens new window)

WebSockets MDN (opens new window)

看完让你彻底搞懂Websocket原理 (opens new window)

Last Updated: 2/24/2020, 9:11:55 PM