一直对实时聊天这块内容迷糊。XMPP 好复杂的说。
对于一个超低配服务端,我想用 Go 压榨性能,利用好“协程”、队列的形式降低一点实时性(即收发消息有少许延迟)保证资源的低消耗,配合 Python 跑一些业务逻辑,调用一下 Push(极光)的推送保证离线消息的接收。
但是,还是搞不清楚应该如何去做,也不明白其中涉及哪些知识点。
另外,如何设计存储聊天信息的 Redis 数据库存储格式呢?
诸位,不吝赐教。
PHP中文网2017-04-17 11:29:17
之前我給上家網路公司負責Android客戶端聊天底層的實現,之前參與過聊天協議的設計,圍觀了下伺服器的架構,上線以來沒有用戶報過丟消息,dau大概大幾十萬(具體數字忘了)
聊天這塊確實比較難做,關鍵在於不知道你想要什麼樣的聊天系統。例如對系統可靠性的要求有多高,就我所知,xmpp是不保證可靠性的。所以你碰到的第一個問題就是協議,不同協議的特徵和特點都不一樣。
相比來說服務端的效能真的不是特別重要,畢竟能把協議正確實現了就很費勁了,而且還要給後面的開發留餘地,方便拓展(這塊兒還是屬於協議的事情)。
至於客戶端的實現,也不輕鬆,資料庫,長連接,ui展示。一處弄不好就有一堆用戶抱怨費電費流量,UI卡什麼的都是小事。
還有,做聊天的,如果讓用戶丟幾則訊息,用戶真的就不想再用了,訊息可靠性真的很重要。
客戶端的網路條件還沒說呢,wap網路的相容性是硬傷,socket下的協定完全用不了的。 。 。
微信確實很牛逼。 。 。
高洛峰2017-04-17 11:29:17
同推薦Pomelo
,lz我也有相同的想法,想閒了實現一下試試看。
樓上幾位說的不錯,我再來貼一個教學:Tutorial----分散式聊天伺服器
=======新增=======
嗯其實我做過XMPP,很複雜,很繁重,尤其是對於行動端的聊天室而言,流量是個問題。另外,其實用Erlang來做訊息也不錯,據說米聊後端核心就是這個做的。
怪我咯2017-04-17 11:29:17
寫過類似的, http://itorr.sinaapp.com/comet/ 只要能實現收發訊息,及時返回新訊息就行,於是配合php+長連線就可以做到了。
//待附源碼