socket.io只发送数据包给发送者
我还没有弄清楚如何直接使用socket.io来响应发件人
我已经了解到,io.sockets.emit发送给所有的客户,但我不会把信息发回给发件人。
码:
socket.on('login', function (data) { db.users.find({username: cc.lowerCase(data.username)}, function(err, users) { if (users.length > 0) { users.forEach( function(user) { console.log(user.length); if (user.password == data.password) { io.sockets.emit('login', { username: user.username }); } else { io.sockets.emit('error', { message: "Wrong username or password!" }); } }); } else { io.sockets.emit('error', { message: "Wrong username or password!" }); } }); });
当您的服务器侦听时,您通常会在“连接”事件中获取一个套接字:
require('socket.io').on('connect', function(socket){
套接字连接2点:客户端和服务器。 当你在这个socket上发射时,你发射到这个特定的客户端。
例如:
var io = require('socket.io'); io.on('connect', function(socket){ socket.on('A', function(something){ // we just received a message // let's respond to *that* client : socket.emit('B', somethingElse); }); });
要小心,这是两个不同的电话:
-
socket.emit
:只发送到一个套接字 -
io.sockets.emit
:发射到所有套接字
简单的例子
socketio中的语法令人困惑。 此外,每个套接字自动连接到他们自己的房间与id socket.id
(这是如何私人聊天工作在socketio,他们使用的房间)。
发送给发件人和其他人
socket.emit('hello', msg);
发送给每个人, 包括发件人(如果发件人在房间里)在房间“我的房间”
io.to('my room').emit('hello', msg);
发送给除了发件人(如果发件人在房间里)在房间“我的房间”
socket.broadcast.to('my room').emit('hello', msg);
发送给每个房间的每个人, 包括发件人
io.emit('hello', msg); // short version io.sockets.emit('hello', msg);
只发送到特定的套接字(私人聊天)
socket.broadcast.to(otherSocket.id).emit('hello', msg);
晚但比从未好;)
我有这样的行为:
io.on('connection', function(socket){ socket.emit('some event', data); socket.on('private event', function(message){ this.emit('other private event', message); } }
经过一些testing后,我意识到'private event'closures中的'this.emit'只能发送给发件人。 所以我尝试了'this.broadcast.emit',它将消息发送给除发送者之外的所有连接。 我相信这是你想要的代码。