希望各位猿类给点建议或者提一些新的方案思路!
前言
小弟无心插柳的聊天项目InChat(一开始叫SBToNettyChat)在广大互联网朋友的积极推动下,慢慢步入正轨,目前2个月(一周4小时开发时间的速度····)迭代着,已经50Star,对于小弟也是很大的肯定,小弟今年7月开始在GitHub做开源,对于开源还不太了解,不过想借助这个InChat项目正式开启开源之路。
项目地址:https://github.com/UncleCatMy...
项目的核心目标也做了转变,目前的大方向就是仿造腾讯IM服务端,以接口的形式提供给中小型团队做IM服务。项目核心是基于Netty改造的。
项目中还添加了Iot的物联网通信功能,这个不是本文重点就略过。
问题环境
项目预想环境:在用户量极大的情况下,将InChat配置为多台服务器,集群的环境,则可能存在用户连接实例在不同的服务器上,则需要如何将Server-One的用户A 发的消息发给 Server-Two的用户B,单台服务器下的点对点发送是简单的,但是跨服务器的话,连接实例只能存放在本服务器中。
猜想一
这种是用到了分发器的思路
集群环境下多个用户在不同服务器登陆后,会将所用用户的登陆信息与服务器位置统一存放到Redis中,前端通过API调用,json格式A发送给B message时,由分发器去查询Redis中B的服务器是one还是two,然后向其中发送message
猜想二
使用消息队列,处理直接放到每台InChat中
接口服务器只负责生产投递消息
交流与问题
以上两种是我想到的方式,是否还有更好的形式,我会后期整理更新到项目中(开一个新的分支)
项目QQ群交流:628793702