socket.io命名空间的详细解析
所谓命名空间,就是指在不同的域当中发消息只能给当前的域的socket收到。 下⾯来看⼀个实例。
看下客户端的代码:
<script src="/socket.io/socket.io.js"></script>
var chat = io.connect('localhost:3000/chat');
var news = io.connect('localhost:3000/news');
<('chat message', function(msg) {
namespace是干嘛的console.log(msg + ' from chat client');
});
<('chat message', function(msg) {
console.log(msg + ' from news client');
})
</script>
这⾥⾯有两个命名空间,⼀个是chat, ⼀个是news, 他们都监听服务端 ‘chat message’的事件,虽然事件名相同,但是在服务端,不同的命名空间⾥,事件内容设置不同。
并且都发出‘chat client’ 的事件,不过事件的内容不⼀样。
再来看下服务端的代码:
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
<('/', function(req, res) {
res.sendFile(__dirname + '/chat.html');
});
var chat = io
.of('/chat')
.on('connection', function(socket) {
<('chat client', function(msg) {
console.log(msg + ' from namespace ' + socket.nsp.name); //接收当前命名空间的消息
});
});
var news = io
.of('/news')
.on('connection', function(socket) {
<('chat client', function(msg) {
console.log(msg + ' from namespace ' + socket.nsp.name); //接收当前命名空间的消息
});
});
http.listen(3000, function() {
console.log('listening on *:3000');
});
运⾏服务端,并浏览器中打开客户端,localhost:3000
在服务端控制台中看到:
肯定是 chat client对应 chat namespace, news client对应news namespace。尽管他们接收的事件都是 ‘chat client’, 绝对不会出现news client 对应 chat namespace, 或者chat client对应news namespace。
再来刷新⼀个客户端,可以看到当前刷新过的客户端控制台的输出:
可以看到服务端特定发给sender以及⼴播的消息都有收到。并且同上,命名空间的消息仅仅对应于当前命名空间。
再看下另外⼀个没有刷新的客户端:
只收到了⼴播的消息,⽽不会收到发给sender的消息。 同时消息只存在于当前命名空间。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论