希望各位猿類給點建議或者提一些新的方案思路!
前言
小弟無心插柳的聊天項目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