【websocket】socket.io 中namespace 和 room的概念

本文详细介绍了Socket.IO中namespace和room的概念及其如何实现广播功能。包括客户端和服务端如何指定namespace及room,以及不同情况下的广播方法。
部署运行你感兴趣的模型镜像

       基本概念看socketio官方文档  http://socket.io/docs/rooms-and-namespaces/

namespace 和room的概念其实用来同一个服务端socket多路复用的。namespace,room和socketio的关系如下。

socket会属于某一个room,如果没有指定,那么会有一个default的room。这个room又会属于某个namespace,如果没有指定,那么就是默认的namespace /.

最后socketio有用所有的namespace。

       客户端连接时指定自己属于哪个namespace,    io.connect(  http://localhost/namespace)。 服务端看到namespace就会把这个socket加入指定的namespace。

如果客户端没有具体指定哪个room,则服务端会放入默认room中,或者服务端通过代码socket.join("rbar") 放入 bar的room中。

    有了这个概念之后,就比较好理解socketio是如何广播的,广播的时候是以namespace为单位的,如果只想广播给某个room,那就需要另外指定room的名字。

socketio.send("send to the clients which belong to default namespace(/)");

这个调用没有指定namespace和room,那么这个广播的对象就是 广播给默认namespace / 和默认room。 如果你的客户端连接到服务器的path是 http://localhost/bar,

客户端是属于bar namespace,那么这个客户端就收不到这个消息。只有那些path是 http://localhost的才能收到。



socket.broadcast.emit('message', "send to the clients which belong to namespace(socket belong to) except sender");

   通过socket广播时,是广播给这个socket所属的 namespace里的所有客户端。只有跟socket同一个namespace里的客户端才能收到数据。


socket.broadcast.in('chat).emit('message', "send to the clients which belong to namespace(socket belong to) except sender");

    广播给跟socket同一个namespace下面的,名字为 chat的room里的除自己以外的客户端。


socketio.of('/private').send("send to all the clients which belong to namespace(priavte)");

      发给 private namespace里的所有客户端。

socketio.of('/private').in('chat').send("send to all the clients in the chat room which belong to namespace(private)");

     发给private namespace里面的 chat room的所有客户端。


     记忆这些函数也比较容易 ,如果是socket开头的,那么namespace已经指定,只能修改room。如果是socketio开头的,那么可以指定namesapce和room。

如果没有任何指定,那就是默认的namespace和默认的room。




 



您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值