1. 程式人生 > >自己設想的一個IM伺服器的架構(續一)

自己設想的一個IM伺服器的架構(續一)

第一個架構模型在這裡

按照裡面評論者的意見,我做了一些修改,見圖.


做了幾處修改:
1) 暴露在外部與客戶端直接相連的伺服器有登入伺服器, 資料伺服器, 訊息伺服器, 線上狀態伺服器,增加了一個session伺服器, 不直接面向客戶端.客戶端在登入的時候,驗證密碼之類的合法性檢查通過之後, 登入伺服器將向session伺服器申請一個新的sessionid, 以後客戶端與這些伺服器進行通訊的時候協議包都需要帶上這個sessionid以驗證協議包是否合法.
在這裡, 登入伺服器做的事情簡化為驗證登入使用者合法性, 返回為登入使用者申請的sessionid, 以及登出使用者同時通知session伺服器登出該使用者的sessionid.
2)訊息伺服器與線上狀態伺服器保持連線,客戶端傳送訊息的時候, 首先訊息伺服器要去查詢使用者是否線上, 如果不線上就存入為離線訊息.
3)線上狀態伺服器與客戶端每隔一段時間都要傳送心跳包保持連線.注意這裡由客戶端主動傳送, 而不是伺服器傳送, 這樣某種程度上可以避免線上伺服器宕機帶來的影響.
4)這幾個暴露在外面的伺服器只是簡單的對外介面, 底下可能還有很多內部使用的伺服器, 請見第一篇架構的說明, 當用戶量上來時, 還需要考慮擴容的問題.

如果還有不妥的地方,請繼續討論,謝謝指教.