2015-09-13 2 views
0

Я новичок в Nodejs, и я учусь из фрагментов кода, загруженных из сети. У меня есть основной вопрос в коде приложения чата.Излучатели событий в NodeJs

Ниже приведен код из 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 и испускает данные, которые фиксируются в стороне клиента, а также функцию, которая прослушивает, если в данных выталкивается из клиента, чтобы вставить его в БД.

Client код стороны -

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)); 
}); 

Теперь мой вопрос, socket.emit в app.js будет захвачен socket.on метода в client.js и socket.emit в кнопке лижут функции в стороне клиента фиксируется в socket.on в сервере боковая сторона.

Как это работает? Почему app.jit app.js не захвачен в методе socket.on внутри app.js, и тот же метод emt-метода js-клиента не захвачен в методе socket.on клиента ja.

Я знаю, что это очень простой вопрос, но, пожалуйста, помогите мне в понимании.

ответ

0

socket.on прослушивает сообщения, поступающие с другой стороны.

В основном, когда вы делаете socket.emit('chat', chat.content);, вы должны указать, к кому отправить его.

У вас есть несколько вариантов, или вы где-нибудь храните список сокетов, где вы можете найти их на основе sessionId/username или что-то еще. или вы можете использовать обратные вызовы.

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); 
    }); 
});