关于Websocket先创建连接,后注册事件,不会漏掉消息吗?

    let socket = new WebSocket('ws://echo.websocket.org/')
    socket.addEventListener('open', e => {
      console.log('open')
    })
    socket.addEventListener('message', e => {
      console.log(e.data)
    })

一直有个疑问:先创建连接,后注册事件,不会漏掉消息吗?

阅读 5.4k
2 个回答

在本地直接搭了一个用ws搭了个简易websocket服务器,然后尝试的结果是,是会丢失的。
server.js

var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({ port: 8181 });
wss.on('connection', function (ws) {
    console.log('client connected');
    ws.on('message', function (message) {
        console.log(message);
        if (ws.readyState == 1) {

                ws.send('JSON.stringify(stocksObj)');//
        }
    });
});

客户端js
用了setTimeout模拟了一下。只有在绑定了监听事件之后才能正常接收到信息。

var ws = new WebSocket("ws://localhost:8181");
setTimeout(function(){
    ws.onopen = function (e) {
        console.log('Connection to server opened');
    }
ws.onmessage = function (e) {
  console.log(e.data)
}    },3000)
function sendMessage() {
    ws.send(123);
}

会漏消息是肯定的。
但是如果漏消息证明服务端设计的不好。连接成功后客户端发送ready给服务端,此次连接才算成功

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题