socket.io 中namespace 和 room的概念。_全栈无侠的博客-程序员秘密

技术标签: javascript nodejs  

       基本概念看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。




 






版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lijiecong/article/details/50781417

智能推荐

使用atexit函数进行异常处理_stridehuan的博客-程序员秘密

按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数。   我们通常认为C语言的起始函数是main函数,实质上一个程序的启动函数并不一定是main函数,这个可以采用链接器来设置,但是gcc中默认main就是C语言的入口函数,在main函数启动之前,内核会调用一个特殊的启动例程,这个启动例

centos7无法进入图形界面_centons 输入 vi/etc/resolc 进不去_玛丽奥ZJY的博客-程序员秘密

转载:https://blog.csdn.net/lcgroger/article/details/82120178?utm_source=blogxgwz1正常登陆后,输入init 5没有反应,无法进入图形界面输入vi /etc/inittab查看有两种模式multi-user.target:analogous to runlevel 3graphical.target: anal...

浅谈并发的数据竞争(可见性)与竞态条件(原子性)_软件开发随心记的博客-程序员秘密

其实并发比较根源的原因就是操作的原子性和状态的可见性无法保证个人理解:    1. 数据竞争?指的是并发条件下,状态属性信息不同步,产生读写误差。之所以会有误差,请参考JVM线程和堆的变量副本问题(缓存)。    2. 竞态条件?指的是并发复合操作,结果不可预测问题。两者容易混淆/** * Created by mori.wang on 2018/7/30. * 经典数据竞争:成...

sql注入-access数据库-总结_sql注入access表结构这么看_kuxing_admin的博客-程序员秘密

Access数据库是一种非常简单但是功能完整的数据库,很适合小型网站创建,可以很轻松管理表和列,有很多管理工具手工注入判断注入点1.这里采用墨者学院提供的SQL手工注入漏洞测试环境http://219.153.49.228:40000/new_list.asp?id=12.判断注入点标准三连 ’ ~ and 1 ~ and 0http://219.153.49.228:47744/new_list.asp?id=1' #页面报错http://219.153.49.228:47744/ne

kubenetes 1.16.0安装kubernetes-dashboard v2.0.0-beta4_普通网友的博客-程序员秘密

kubenetes github :https://github.com/kubernetes/dashboard/releaseskubenetes官网:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/本人安装kubenetes 1.16.0,刚开始使用kubernetes-dash...

git 上传本地代码到远程服务器分支_git push origin 本地要上传代码的分支名称:远程你要上传的指定分支名称______miss的博客-程序员秘密

一 . git的安装和配置1、首先是安装git,这个很简单(Windows)2、其次是在git bash中给git配置环境 git config --global user.name = "username"(自己设置的名字) git config --global user.email =="[email protected]" (有效邮箱) (这里的配置...

随便推点

机器学习数学基础之线代篇——线性代数python手册(建议收藏)_水龙吟唱的博客-程序员秘密

提到线性代数,又不得不吐槽国内教材了,学起来真的是实力劝退。有多少跟着国内教材学完线性代数课程后,知道线性代数是什么,它到底是干什么的?事实上如果你后面想做科研、想研究机器学习、深度学习,你会发现处处是线性代数。这么抽象又重要的课程,一本书里基本看不到几张图,就好比是没有注释的代码,大概以为我的脑子就是记公式的机器吧…如果你还未开始学习线性代数,那么强烈建议你把学校发的紫色教材放在一边,找几本国外的线性代数教材看看。然后在B站里搜一下Gilbert Strang老爷子的线性代数视频(麻省理工公开课,80

C++类和内存管理【C++ primer 笔记】_c++ 类的管理_三十三天天堂堡的博客-程序员秘密

文章目录程序构建badstring.hbadstring.cppmain.cpp编译和运行结果:程序说明结果分析程序构建设计一个badstring类,它将包含一个字符串指针和一个表示字符串长度的值。badstring.h#include <iostream>#ifndef BADSTRING_H_#define BADSTRING_H_class badstring{private: char *str; int len; static int num

前缀和 差分数组(来自小白的理解)_前缀和数组的含义_罗来杀疯了的博客-程序员秘密

前缀和 差分数组当我们有一连串的数字的时候 我们要求这串数字中某一区间数字的合,首先想到的办法是找到这个区间的开头和结尾,但是要求多组的这样区间的和的时候,这样的“笨办法将会非常的麻烦”,占时间也占空间。于是我我们可以引入一个概念:前缀和前缀和是某下标之前包括这个下标的数组内数字的和a[]为原数组,b[]为前缀和数组则可得b[]的递推式为:b[i]=b[i-1]+a[i]说简单就是有一个数组,它每一位是包括当前这一位与之前所有位的和。举个栗子a[0] a[1] a[2] a[3] a[4

Git 的使用_weixin_33697898的博客-程序员秘密

Git 使用本节内容github介绍安装仓库创建& 提交代码代码回滚工作区和暂存区撤销修改删除操作远程仓库分支管理多人协作github使用忽略特殊文件.gitignore为什么要用版本控制?假设你在的公司要上线一个新功能,你们开发团队为实现这个新功能,写了大约5000行代码,上线没2天,就发现这个功能用户并不喜欢,...

接口管理工具_接口管理工具应该具备哪些能力_HeronWang_的博客-程序员秘密

在项目开发测试中,接口文档是贯穿始终的。前后端开发需要在开发前期进行接口定义并形成文档,QA在功能测试和接口测试的环节也需要依赖于这些接口文档进行测试。接口文档往往以最简单的静态文档的形态存在。然而在紧张的敏捷开发模式下,随着版本迭代,很多接口发生了变化或者被废弃,而开发几乎不会在后期去更新这种静态文档。QA人员阅读“过期”的接口文档是一件痛苦的事情,与开发的沟通成本不降反升。而这些不便于及时维护...

华为手机怎么安装鸿蒙os,华为鸿蒙OS2.0系统怎么安装_Jill Yao的博客-程序员秘密

相信很多小伙伴对于华为最近发布的鸿蒙OS2.0系统,那么我们应该怎么安装使用呢?不要着急,接下来小编就给大家带来这方面的详细内容,感兴趣的小伙伴们可千万不要错过了哦。华为鸿蒙OS2.0系统安装方法一览从 12 月 16 日开始,我们面向开发者提供两种开发者手机 Beta 版本尝鲜方式:1、使用 HUAWEI DevEco Studio 中的远端模拟器,HarmonyOS 官网下载 DevEco S...

推荐文章

热门文章

相关标签