【问题标题】:Event Emitters in NodeJsNodeJs 中的事件发射器
【发布时间】:2019-10-20 20:24:35
【问题描述】:

我是 Nodejs 的新手,我正在学习从网上下载的代码 sn-ps。我有一个关于聊天应用程序代码的基本问题。

下面是 app.js 的代码(服务器端)

var stream = collection.find().sort().limit(10).stream(); // collection coming from mongoDb
stream.on('data', function (chat) { 
          socket.emit('chat', chat.content); 
});

socket.on('chat', function (msg) {
  // code to add into mongoDB
}

上述代码,从 mongoDB 获取记录并发出在客户端捕获的数据,以及一个监听从客户端推送的数据是否插入 DB 的函数。

客户端代码 -

var socket = io();
$('#send-message-btn').click(function () { // this is a button
    var msg = $('#message-box').val();
    socket.emit('chat', msg);
    $('#messages').append($('<p>').text(msg));
    $('#message-box').val('');
    return false;
});
socket.on('chat', function (msg) {
    console.log('adding to message div '+msg);
    $('#messages').append($('<p>').text(msg));
});

现在我的问题是,app.js 中的 socket.emit 被client.js 中的socket.on 方法捕获,客户端按钮舔功能中的socket.emit 被服务器端socket.on 捕获。

它是如何工作的?为什么 app.js 的 socket.emit 没有在 app.js 中的 socket.on 方法中捕获,而客户端 js 的 emit 方法没有在客户端 ja 的 socket.on 方法中捕获。

【问题讨论】:

    标签: angularjs node.js


    【解决方案1】:

    socket.on 监听来自另一端的消息。

    基本上,当您执行socket.emit('chat', chat.content); 时,您应该指定要将其发送给哪个用户。

    您几乎没有选择,或者您在某处保留了一个套接字列表,您可以在其中根据 sessionId/用户名或其他内容找到它们。或者你可以使用回调。

    client.js

    $('#send-message-btn').click(function () { // this is a button
    var msg = $('#message-box').val();
    socket.emit('chat', msg, function(res) {
        console.log('adding to message div '+msg);
        $('#messages').append($('<p>').text(msg));
    );
    $('#messages').append($('<p>').text(msg));
    $('#message-box').val('');
    return false;
    });
    

    在服务器中

    socket.on('chat', function (msg, cb) {
        var stream = collection.find().sort().limit(10).stream(); // collection coming from mongoDb
        stream.on('data', function (chat) { 
             cb(chat.content); 
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多