【问题标题】:NodeJS Websocket (ws) CallbackNodeJS Websocket (ws) 回调
【发布时间】:2017-07-12 10:28:30
【问题描述】:

我正在使用“ws”NodeJS websocket 库。以前我在尝试socket.io;使用 socket.io,我可以像这样在客户端和服务器之间实现回调:

socket.emit('Data', data, function(data){
       console.log(data);
});

socket.on('Data', function(data, callback){
       callback('it worked');
});

我尝试使用 ws 库做同样的事情,但没有任何成功。有可能吗?如果有,怎么做?

【问题讨论】:

    标签: node.js websocket


    【解决方案1】:

    API 非常相似,您可以做几乎相同的事情。

    例如在服务器端而不是:

    s.emit('message', 'message from server');
    

    你使用:

    s.send('message from server', ()=>{});
    

    在客户端接收它而不是:

    s.on('message', function (m) {
      // ...
    });
    

    你使用:

    s.addEventListener('message', function (m) {
      // ...
    });
    

    等等。

    在这个答案中,我展示了示例代码(前端和后端)来演示 Socket.io 和 WebSocket 之间的区别:

    这是示例服务器代码:

    var path = require('path');
    var app = require('express')();
    var ws = require('express-ws')(app);
    app.get('/', (req, res) => {
      console.error('express connection');
      res.sendFile(path.join(__dirname, 'ws.html'));
    });
    app.ws('/', (s, req) => {
      console.error('websocket connection');
      for (var t = 0; t < 3; t++)
        setTimeout(() => s.send('message from server', ()=>{}), 1000*t);
    });
    app.listen(3001, () => console.error('listening on http://localhost:3001/'));
    console.error('websocket example');
    

    浏览器代码示例:

    var l = document.getElementById('l');
    var log = function (m) {
        var i = document.createElement('li');
        i.innerText = new Date().toISOString()+' '+m;
        l.appendChild(i);
    }
    log('opening websocket connection');
    var s = new WebSocket('ws://'+window.location.host+'/');
    s.addEventListener('error', function (m) { log("error"); });
    s.addEventListener('open', function (m) { log("websocket connection open"); });
    s.addEventListener('message', function (m) { log(m.data); });
    

    请参阅this 了解更多信息。

    【讨论】:

      【解决方案2】:

      这可以像这样使用WebSockets-Callback 来完成

      wscb.send({cmd: 'Hello server!'},
          function(response){
              //do something...
          }
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 2017-03-09
        • 1970-01-01
        • 2017-08-26
        • 2021-09-14
        • 2013-07-07
        • 1970-01-01
        相关资源
        最近更新 更多