第一個架構(gòu)模型在
這里按照里面評論者的意見,我做了一些修改,見圖.

做了幾處修改:
1) 暴露在外部與客戶端直接相連的服務(wù)器有登錄服務(wù)器, 資料服務(wù)器, 消息服務(wù)器, 在線狀態(tài)服務(wù)器,增加了一個session服務(wù)器, 不直接面向客戶端.客戶端在登錄的時候,驗證密碼之類的合法性檢查通過之后, 登錄服務(wù)器將向session服務(wù)器申請一個新的sessionid, 以后客戶端與這些服務(wù)器進行通信的時候協(xié)議包都需要帶上這個sessionid以驗證協(xié)議包是否合法.
在這里, 登錄服務(wù)器做的事情簡化為驗證登錄用戶合法性, 返回為登錄用戶申請的sessionid, 以及登出用戶同時通知session服務(wù)器注銷該用戶的sessionid.
2)消息服務(wù)器與在線狀態(tài)服務(wù)器保持連接,客戶端發(fā)送消息的時候, 首先消息服務(wù)器要去查詢用戶是否在線, 如果不在線就存入為離線消息.
3)在線狀態(tài)服務(wù)器與客戶端每隔一段時間都要發(fā)送心跳包保持連接.注意這里由客戶端主動發(fā)送, 而不是服務(wù)器發(fā)送, 這樣某種程度上可以避免在線服務(wù)器宕機帶來的影響.
4)這幾個暴露在外面的服務(wù)器只是簡單的對外接口, 底下可能還有很多內(nèi)部使用的服務(wù)器, 請見第一篇架構(gòu)的說明, 當(dāng)用戶量上來時, 還需要考慮擴容的問題.
如果還有不妥的地方,請繼續(xù)討論,謝謝指教.