废话连篇
牛郎织女来相会,燕雀前来搭桥。你我天各一方,终盼今日相会,奈何天河阻断,空悲切。
方案一、

1、谁发起,谁卖力,无法承担,甩锅给行列步队,大家共同卖力
详解:uid1 在做事 S1 上,想要推送给 uid2,先查看uid2 是否在S1 上,在直接推送就好了;不在,则把事宜推送到Queue,
每个做事都订阅该topic,消费,(事宜触发)
关键:两个消费群组,消费一个topic,通过行列步队,实现触发动作
缺陷:相称于遍历所有做事,增加做事压力
技能:MQ 不限(RabbitMQ、kafka等),也可以redis 实现
方案二、
1、网关卖力,分发连接那个做事,然后指定推送
详解:uid1 客户端发起连接,hash 取值到相应做事;uid2 客户端发起连接,hash 取值到相应做事;
uid1 想要和 uid2 通讯,则对uid2 进行hash 取值,是否和自己在同一台做事器,在则直接推送,不在则直接推送到相应的做事器
关键:Hash、Queue
比较:
比较方案一:做事压力相对较小,减轻不必要的查询(优)比较方案一:设计更繁芜 (缺)方案三、
1、协议叠加,不通过MQ
方法同方案二类似,用户连接,redis记录所在做事器,不在自己的做事器,则通过HTTP 或者其他协议,推送到目标做事器
回调函数 onRequest,可以吸收 HTTP协议
官方文档:https://wiki.swoole.com/wiki/page/397.html
深入谈论:
关键点:1、用户在哪台做事器,怎么记录?
2、跨做事怎么通讯?
问题一:用户在哪台做事器,怎么记录?上面采取了两种办法
1、连接之后redis 记录, uid1:server1; uid2:server2;uid3:server1;
2、通过hash 分配 (扩容之后,节点会发生变革,会影响部分节点的客户端连接)
问题二:跨做事怎么通讯?
1、通过行列步队中间件,进行信息的通报
1.1 :一种为广播:创建一个topic,其他做事都订阅这个topic,会增加没必要的遍历查询
1.2 :一种为精准投递,须要掩护多个topic,做事节点消费者,只需订阅自己的专属的消费行列步队,
2、通过协议叠加,通报。由于webSocket 本身便是 HTTP的升级版(upgrade),可以吸收来自HTTP的要求(见上方:方案三)
总结:比较较而言,个人认为方案三,最大略,支配更方便快捷。
左手代码,右手诗,意见意义学习新知识