socket.io 中namespace 和 room的概念。_socketio 房间概念-程序员宅基地

技术标签: 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

智能推荐

ubuntu18.04安装微信——简单操作版本_ubuntu 18.04.6 lts安装微信-程序员宅基地

文章浏览阅读1.9k次。ubuntu+windows双系统尴尬之处:工作在ubuntu,可通讯软件却在windows,ubuntu就像是与世隔绝1.新建install.sh文件sudo gedit install.sh将以下代码复制到打开的install.sh文件中#!/bin/bashmkdir ./deepintempcd ./deepintempwget http://packages.deepin.com/deepin/pool/non-free/d/deepin-wine/deepin-wi_ubuntu 18.04.6 lts安装微信

Android Studio中查看和修改Android工程的编译jdk版本_androidstudio怎么看jdk版本-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏8次。Android Studio中查看和修改Android工程的编译jdk版本的方法可能并不固定,因为随着Android Studio的版本更新,其菜单位置经常发生变化。本文以macOS下Arctic Fox | 2020.3.1 Patch 1版本为例进行说明:File->Project Structure...->SDK Location->Gradle Settings->Gradle JDK。可以从这里查看当前的jdk版本,也可以从下拉列表中选择其他jdk版本。..._androidstudio怎么看jdk版本

【精心挑选】推荐几款非常棒的 jQuery 全景图片展示插件-程序员宅基地

文章浏览阅读47次。  之前的文章向大家分享了实现网站功能的各种插件,今天这篇文章向大家推荐7款精心挑选的 jQuery全景图片展示插件,同时还有非常详细的制作教程可以参考。全景图片展示是一种非常有趣的技术,通过把多张图片合并在一起让你可以360度浏览。这种效果常用于旅游网站或者酒店网站,用于展示风景或者房间的内景。您可能还喜欢精心挑选的美轮美奂的 jQuery 图片特效插件精心挑选的优秀jQu..._jq全景图

【论文翻译】Learning Generalizable and Identity-Discriminative Representations for Face Anti-Spoofing_learning causal representations for generalizable -程序员宅基地

文章浏览阅读2.9k次。Abstract 由于人脸认证系统的高安全性需求,面部反欺骗(a.k.a演示攻击检测)已引起越来越多的关注。当训练和测试欺骗样本拥有相似的模式时,现有的基于CNN的方法通常很好地识别欺骗攻击,但它们的性能会在未知场景的测试欺骗攻击上急剧下降。在本文中,我们试图通过设计两个新颖性的CNN模型来提高方法的泛化能力和适用性。首先,我们针对CNN模型提出了一种简单但有效的总成对混淆(TPC)损失函数,..._learning causal representations for generalizable face anti spoofing

上篇:技术架构的设计方法_技术架构方案-程序员宅基地

文章浏览阅读301次。技术思考本质还是结构化思考,所以常见的结构化思考方法也是适用的。这也是大家会看到很多技术架构师都会用一些方法论去分析问题的原因。但这里我不是重新去论述这些常见的技巧,而是分享从技术实战中得到的一些思考方法,为此我分为了技术架构设计的方法和技术 Leader 的思考方法两类。..._技术架构方案

蓝桥杯 算法训练 拿金币(java)_java有n个格子,每个格子里放着不定价值的金币。你可以拿走格子里的金币,但是不能-程序员宅基地

文章浏览阅读4.3k次,点赞14次,收藏27次。蓝桥杯 算法训练 拿金币(java)题试题 算法训练 拿金币资源限制时间限制:1.0s 内存限制:256.0MB问题描述  有一个N x N的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。输入格式  第一行输入一个正整数n。  以下n行描述该方格。金币数保证是不超过1000的正整数。输出格式  最多能拿金币数量。样例输入31 3 32 2 23.._java有n个格子,每个格子里放着不定价值的金币。你可以拿走格子里的金币,但是不能

随便推点

HarmonyOS(鸿蒙)开发一文入门,kotlin环境配置-程序员宅基地

文章浏览阅读414次,点赞3次,收藏10次。才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

Excel中的宏、VBA_vba宏-程序员宅基地

文章浏览阅读1.7k次。宏通过使我们执行的大多数日常工作自动化来简化我们的工作生活。Excel 中的宏由 Visual Basic for Applications 驱动。Step 2)单击自定义功能区将复选框标记为开发人员选项点击确定按钮Step 2)单击自定义功能区将复选框标记为开发人员选项点击确定按钮Step 3)Step 3)Step 4)在驱动器 C 中创建一个名为 Bank Receipts 的文件夹粘贴您下载的 receives.csv 文件Step 4)Step 5)单击开发人员选项卡。_vba宏

广州大学计算机科学与技术录取排名,2021年广州大学专业排名排行榜公布 附招生专业目录及计划...-程序员宅基地

文章浏览阅读1.4k次。每个大学都有自己的特色专业,都有自己的重点专业,考生在志愿填报选择专业的时候,应该要了解该校的专业招生目录及排名相关情况,本文现代教育网小编整理了关于2020年广州大学的招生专业排名及招生专业目录相关数据,可供参考。一、广州大学招生专业目录一览表院系设置所有专业环境科学与工程学院环境工程环境科学建筑与城市规划学院城乡规划建筑学风景园林物理与电子工程学院物联网工程物理学光电信息科学与工程计算机科学与..._广州大学计算机排名

Msa类处理多序列比对数据_a3m格式-程序员宅基地

文章浏览阅读1.5k次。【代码】Msa类处理多序列比对数据。_a3m格式

Ubuntu systemd.service服务单元配置详解_ubuntu systemd service-程序员宅基地

文章浏览阅读872次。​A unit configuration file whose name ends in ".service" encodes information about a process controlled and supervised by systemd.This man page lists the configuration options specific to this unit type. Seesystemd.unit(5)for the common options of all_ubuntu systemd service

854大神JSP基于SSM校园二手书跳蚤市场交易平台可升级SpringBoot-计算机毕业源码设计-程序员宅基地

文章浏览阅读578次,点赞18次,收藏7次。图书出售: 出售id,图书主图,图书名称,图书类别,出版社,作者,出售价格,新旧程度,出售说明,发布用户,用户发布时间。求购: 求购id,图书主图,图书名称,图书类别,出版社,作者,求购价格,新旧程度,求购说明,发布用户,用户发布时间。用户: 用户名,登录密码,姓名,性别,出生日期,用户照片,联系电话,邮箱,家庭地址,注册时间。留言: 留言id,留言标题,留言内容,留言人,留言时间,管理回复,回复时间。图书订单: 订单id,图书信息,意向用户,意向出价,用户备注,下单时间。图书类别: 类别编号,类别名称。