背景

我们部署单点websocket服务时很简单就可以实现,但是现实中的业务往往对性能要求非常高,因此单点服务并不能满足我们的需求,所以我们需要横向的扩展服务,来满足性能要求。

举个简单的例子,我们建立一个简单的聊天室,人数少的时候可以正常提供服务,但当聊天的人数超过单台服务器所能服务的数量时,服务器就不能提供相应的服务。我们可以通过提高服务器的配置来继续满足,但是提升配置后依然会达到上限。所以我们需要提供分布式的websocket服务,不再集中在一台服务器上,我们可以通过横向扩展,在多台服务器上部署相同的服务,来满足我们的扩展需求。

设计

原理

Websocket服务中正常启动后,每个用户连接后会一直存在,因此连接要保存在内存中,并在服务中管理起来,根据不同的需要,服务确定是否要通知集群中其他连接信息

基本的原理

  • websocket服务中,单独启用一个线程来订阅MQ,线程中收到订阅,根据业务需求来确定通知所有连接与否。
  • 单独提供一个RabbitMQ服务
  1. 接收websocket的发送业务处理集群的消息
  2. 接收业务处理集群发送websocket的消息,这里采用的是广播,不再对业务中进行判断是否发送,由websocket服务判断是要发送给哪个连接
  • 业务服务集群,监听mq提供的业务处理消息,然后再将结果发送到websocket订阅的消息队列中

架构图

代码

关注微信公众号:战渣渣

回复关键字 “ws集群” 获取源码

websocket 发送多条消息如何判断全部接收_Websocket的分布式集群开发及部署相关推荐

  1. php微信公众号向指定客服发信息,微信公众号给用户发送一条消息 客服消息

    可以用客服消息接口或模板消息接口实现.但是需要认证公众号才能有权限. 认证服务号可以发送客服接口消息[需要对应openid24小时内有互动]和模板消息,订阅号则没有模板消息权限. 下面是发送客服消息的 ...

  2. 领英如何高效加好友,领英一天最多可以发送多少条消息?

    一个领英账号可以加3万好友,加为好友后彼此可相互关注,也可以直接在领英上面发站内消息,还可以直接查看到对方的电话.邮箱.社交账号等重要的联系方式.但领英对加好友是有限制的,每周都有邀请名额的限制,这就 ...

  3. RabbitMQ#RabbitMQ+Haproxy消息队列集群和代理部署

    文章目录 一.消息队列/中间件 1.RabbitMQ本质上起到的作用就是削峰填谷 2.MQ简介(RabbitMQ比Kafka) 3.MQ消息队列的分类 二.RabbitMQ介绍(端口15672) 1. ...

  4. vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ

    为什么要使用MQ消息中间件?它解决了什么问题?关于为什么要使用消息中间件?消息中间件是如何做到同步变异步.流量削锋.应用解耦的?网上已经有很多说明,我这里就不再说明.我在接下来的RabbitMq系列博 ...

  5. rocketmq发送第一条消息(三)

    直接上代码 导包,pom.xml <dependency><groupId>org.apache.rocketmq</groupId><artifactId& ...

  6. java tcp发消息给硬件_java – TCP客户端/服务器通信只发送第一条消息?

    我在java中设置一个简单的TCP客户端服务器交互. 服务器: 服务器是用Java编写的桌面客户端: import java.io.BufferedReader; import java.io.Dat ...

  7. nodejs实现公众号服务URL绑定验证,nodejs实现公众号关注并回发送一条消息,以及关注之后的聊天自动回复消息

    首先关注公众号的时候,公众号会发送一条 post 请求到 nodejs 服务器,这条消息是 xml 数据类型,这里就用到 xml 解析,demo 里用的是 fast-xml-parser@3.12.1 ...

  8. 消息队列专题(架构篇):RabbitMQ 的集群架构模式

    RabbitMQ 的集群架构模式主要有四种,分别是主备模式.远程模式.多活模式和镜像模式,本篇博客将依次介绍这四种架构模式,其中的镜像模式使用范围最广,我们将对其进行重点介绍. 主备模式 主备模式是指 ...

  9. mqtt 负载均衡_EMQ百万级MQTT消息服务(分布式集群)

    在强大的单机也比不上集群,EMQ的集群模式很粗暴,只需要把EMQ服务关联在一起然后负载均衡就可以达到集群的效果,这样就算面对1000CK问题也迎刃而解 附上: 喵了个咪的博客:w-blog.cnEMQ ...

  10. 【RAC】使用一条“ps”命令获取Linux环境下全部RAC集群进程信息

    如何仅使用一条ps命令便能获取到所有与RAC集群进程相关的信息.   从所使用的命令角度上看很简单,仅需使用ps命令结合grep命令便能实现.问题关键是需要确定检索哪些关键字. 1.与RAC集群有关的 ...

最新文章

  1. 第十六届全国大学生智能车各分赛区所需要的比赛系统器材
  2. 贝塞尔曲线(Bezier Curves)
  3. 第一次使用aspnet_compiler失败记录
  4. io_uring设计理念及使用方式总结
  5. CSS布局奇淫巧计之-强大的负边距
  6. [Leetcode][第93题][JAVA][复原IP地址][剪枝][回溯]
  7. js实现shallowReactive和reactive
  8. php msgid排重,如何应用php数组对百万数据停止排重
  9. EntityFramework 实体拆分与表拆分
  10. 【优化求解】基于matlab遗传算法结合粒子群算法求解单目标优化问题【含Matlab源码 1659期】
  11. 加权平均数的例子_加权平均法举例说明
  12. STM32入门笔记(02):麦克纳姆轮、TB6612电机驱动、PID电机控制和编码器学习记录
  13. 西门子S7系列PLC与触摸屏模拟仿真(无需实物)
  14. 云计算三种架构(IaaS, PaaS, SaaS)及部署模型
  15. Shell实现俄罗斯方块小游戏
  16. 英国高端SPA级奢养护肤品牌EVE LOM相继入驻成都IFS、北京连卡佛;FILA斐乐携手梵高博物馆推出全新联名系列 | 知消...
  17. Java操作word文档将docx转换为pdf格式
  18. 吻吻更健康!揭晓接吻的11大优点
  19. 【1075】药房管理
  20. 《C++程序设计》在线平时作业2

热门文章

  1. 怎么做301永久重定向
  2. SLAM_2019-ICCV_GSLAM:通用 SLAM 框架和基准
  3. SLAM_局部束调整(local Bundle Adjustment, BA)步骤与代码示例
  4. 一个VO(Visual Odometry)的简单实现
  5. Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
  6. 年度重磅!2020年度中国计算机视觉人才调研报告正式发布
  7. SNIP物体检测算法理解
  8. LeetCode之根据字符出现频率排序
  9. 关于微信支付后回调验证的处理
  10. MySQL解决中文编码问题