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

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