socket.io 中namespace 和 room的概念。
来源:互联网 发布:自动随访系统 源码 编辑:程序博客网 时间:2024/06/05 07:45
基本概念看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。
- socket.io 中namespace 和 room的概念。
- socket.io 中namespace 和 room的概念。
- socket.io1.3.5关于io.sockets.clients(room)的问题
- JS中命名空间(namespace)的概念和使用
- c++中std namespace和socket的bind的冲突
- 命名空间namespace的概念和使用
- 命名空间namespace的概念和使用
- 在kotlin中使用room(Room Persistence Library)和遇到的坑
- socket.io中emit和on的用法
- socket.io中emit和on的用法
- socket.io中emit和on的用法【转】
- socket的概念和原理
- socket的概念和原理
- nodejs的socket.io和socket应用
- php中namespace和use的用法
- C++中namespace和class的区别
- mybatis中namespace和别名的使用
- IO概述 流的概念和分类
- 【Android】Service中判断当前是否全屏(状态栏是否隐藏)
- C++调用lib或dll文件
- SQL 合并数据
- Android系统服务详解-android学习之旅(95)
- Linux信号(signal)
- socket.io 中namespace 和 room的概念。
- ionic 隐藏action bar的返回按钮
- 性能测试(一):性能测试关心的结果
- 77.In the CUSTOMERS table, the CUST_CITY column contains the value 'Paris' for the
- Qt lupdate 和 lrealease 命令行使用方式(多语言)
- SSL协议详解
- try/catch/finally详解+示例
- eclipse tomcat maven 集成开发环境
- 【mergeSort】