-
io.emit
和io.sockets.emit
是一樣的扣溺,向所有連接的客戶端都發(fā)送聘芜。
io.emit('an event sent to all connected clients');
io.sockets.emit('an event sent to all connected clients');
建議使用io.emit
- 連接內(nèi)部的socket代表的是每一個(gè)連接本身因此:
-
socket.broadcast.emit
會(huì)像當(dāng)前連接之外的連接的服務(wù)器端發(fā)送消息 -
socket.on socket.emit
不用多說(shuō)
-
將數(shù)據(jù)關(guān)聯(lián)并存儲(chǔ)到當(dāng)前連接的 socket
在一個(gè)會(huì)話周期中币绩,我們大部分情況下都需要存儲(chǔ)當(dāng)前會(huì)話者的一些數(shù)據(jù),來(lái)識(shí)別或者特定情形下獲取這些數(shù)據(jù)赖条。
示例代碼
var io = require(‘socket.io‘).listen(80);
io.sockets.on(‘connection‘, function (socket) {
socket.on(‘set nickname‘, function (name) {
socket.set(‘nickname‘, name, function () {
socket.emit(‘ready‘);
});
});
socket.on(‘msg‘, function () {
socket.get(‘nickname‘, function (err, name) {
console.log(‘Chat message by ‘, name);
});
});
}); 非常建議使用這種方式來(lái)設(shè)置用戶會(huì)話的數(shù)據(jù)底哗。
在服務(wù)端收到connection的事件的時(shí)候,socket會(huì)攜帶一個(gè)建立連接時(shí)瀏覽器端傳過(guò)來(lái)的握手信息socket.handshake
這些瀏覽器端的信息得到之后隧枫,就很容易進(jìn)行權(quán)限的驗(yàn)證了喉磁。socket.io同時(shí)提供了
io.set('authorization', callback);
方法來(lái)對(duì)每個(gè)連接進(jìn)行權(quán)限限制。
http://deadhorse.me/nodejs/2011/12/29/socket.io_induction.html