我是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获取记录并发出在客户端捕获的数据,还有一个函数,它监听从客户端推送的数据是否插入到数据库中。
客户端代码 -
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已被socket.on
中的client.js
方法捕获,socket.emit
中的socket.on
按钮lick函数在{{1}中捕获在服务器端。
怎么运作?为什么app.js的socket.emit没有在app.js中的socket.on
方法中捕获,并且在客户端ja的socket.on
方法中没有捕获到相同的客户端js的emit方法。
我知道这是一个非常基本的问题,但请帮助我理解。
答案 0 :(得分: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);
});
});