【问题标题】:Close mubsub client after emitting with socket.io-mongodb-emitter使用 socket.io-mongodb-emitter 发射后关闭 mubsub 客户端
【发布时间】:2016-10-25 23:34:55
【问题描述】:

我正在尝试使用socket.io-mongodb-emitter 向socket.io 房间发送一些消息。我的问题是,我的脚本永远不存在,因为它保持与mongodb 的连接。

请检查我下面的例子,给我一些建议,我怎样才能让脚本关闭mongodb连接并让自己退出。

emitter.js 这个脚本发出消息,客户端得到它,但进程没有退出。

var io = require('socket.io-mongodb-emitter')("mongodb://localhost:27017/test");
io.in('someRoom').emit('someMessage');

emitter-2.js此脚本退出,但客户端永远不会收到消息。

var io = require('socket.io-mongodb-emitter')("mongodb://localhost:27017/test");
io.in('someRoom').emit('someMessage');
io.client.close();

emitter-3.js 这个完美运行,客户端得到消息,进程退出。但是setTimeout是一个非常糟糕的解决方案,必须有一些适当的方法让这个进程自行退出。

var io = require('socket.io-mongodb-emitter')("mongodb://localhost:27017/test");
io.in('someRoom').emit('someMessage');
setTimeout(function () {
    io.client.close();
},100);

【问题讨论】:

    标签: javascript node.js mongodb sockets socket.io


    【解决方案1】:

    也许使用回调来获得客户端收到消息的确认,然后调用关闭函数

    服务器:

    var message = "hello";
    io.in('someRoom').emit('someMessage', message, function(data){
        console.log(data);
        io.client.close();
    });
    

    客户:

    socket.on('someMessage', function(message, callback){
        // do something with message here
        callback('message received');
    });
    

    【讨论】:

      【解决方案2】:

      您需要使用 .emit 的功能来接收消息已发送的确认。

      这样做:

      io.in('someRoom').emit('someMessage',function(){
          console.log('message was sent');
          io.client.close();
      );
      

      在服务器上,您需要在收到时调用该函数。

        socket.on('someMessage', function (name, fn) {
          fn('received');
        });
      

      文档here

      【讨论】:

        猜你喜欢
        • 2014-12-31
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 2018-02-13
        • 2016-06-16
        • 2020-03-12
        • 2017-05-18
        • 1970-01-01
        相关资源
        最近更新 更多