首頁  >  問答  >  主體

ajax - 如何自己实现一个聊天系统,覆盖(Web,Android,iOS)

一直对实时聊天这块内容迷糊。XMPP 好复杂的说。
对于一个超低配服务端,我想用 Go 压榨性能,利用好“协程”、队列的形式降低一点实时性(即收发消息有少许延迟)保证资源的低消耗,配合 Python 跑一些业务逻辑,调用一下 Push(极光)的推送保证离线消息的接收。
但是,还是搞不清楚应该如何去做,也不明白其中涉及哪些知识点。
另外,如何设计存储聊天信息的 Redis 数据库存储格式呢?
诸位,不吝赐教。

怪我咯怪我咯2765 天前844

全部回覆(12)我來回復

  • PHP中文网

    PHP中文网2017-04-17 11:29:17

    之前我給上家網路公司負責Android客戶端聊天底層的實現,之前參與過聊天協議的設計,圍觀了下伺服器的架構,上線以來沒有用戶報過丟消息,dau大概大幾十萬(具體數字忘了)

    聊天這塊確實比較難做,關鍵在於不知道你想要什麼樣的聊天系統。例如對系統可靠性的要求有多高,就我所知,xmpp是不保證可靠性的。所以你碰到的第一個問題就是協議,不同協議的特徵和特點都不一樣。
    相比來說服務端的效能真的不是特別重要,畢竟能把協議正確實現了就很費勁了,而且還要給後面的開發留餘地,方便拓展(這塊兒還是屬於協議的事情)。
    至於客戶端的實現,也不輕鬆,資料庫,長連接,ui展示。一處弄不好就有一堆用戶抱怨費電費流量,UI卡什麼的都是小事。
    還有,做聊天的,如果讓用戶丟幾則訊息,用戶真的就不想再用了,訊息可靠性真的很重要。
    客戶端的網路條件還沒說呢,wap網路的相容性是硬傷,socket下的協定完全用不了的。 。 。
    微信確實很牛逼。 。 。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 11:29:17

    推薦pomelo

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 11:29:17

    同推薦Pomelo,lz我也有相同的想法,想閒了實現一下試試看。
    樓上幾位說的不錯,我再來貼一個教學:Tutorial----分散式聊天伺服器
    =======新增=======
    嗯其實我做過XMPP,很複雜,很繁重,尤其是對於行動端的聊天室而言,流量是個問題。另外,其實用Erlang來做訊息也不錯,據說米聊後端核心就是這個做的。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 11:29:17

    參考 firebase
    https://www.firebase.com/

    回覆
    0
  • 黄舟

    黄舟2017-04-17 11:29:17

    https://github.com/xiaowudesign/nowboard 這有一個,是透過微博登入,實現線上資訊交流的。只是給樓主一個思路。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 11:29:17

    Web可以用socket.io(話說是node.js,go不會的說),具體有教程的 用socket.io和express搭建聊天室

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 11:29:17

    基於xmpp的, 服務端有開源的openfire , tigase 等。

    web 端可以使用jsjac, strophe 等。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 11:29:17

    我們剛剛用socket.io實作了一個,快取使用的是redis

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 11:29:17

    寫過類似的, http://itorr.sinaapp.com/comet/ 只要能實現收發訊息,及時返回新訊息就行,於是配合php+長連線就可以做到了。
    //待附源碼

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 11:29:17

    很多應用都用xmpp,看起來

    回覆
    0
  • 取消回覆