轉自:http://blog.csdn.net/m372897500/article/details/49159237
1. 用戶帳號管理模塊:
該模塊管理基於用戶帳號的所有操作:具體由如下:創建用戶,刪除用戶,修改用戶資料,修改用戶密碼,得到用戶個人信息,得到好友列表,登陸,登出,請求認證串,創建羣組,加入羣組,離開羣組。
客戶端發送命令請求得到認證串——〉網絡/協議解析模塊把客戶端請求以及它的用戶標誌轉發給用戶帳號管理模塊——〉用戶帳號管理模塊自動生成一個隨機認證串,同時把該客戶端的用戶標誌一起保存在列表中(在列表中該數據只能保存一分鐘,超過則刪除,因此客戶端必須在一分鐘內利用此認證串登陸),同時把認證串由網絡/協議解析模塊發送給客戶端——〉客戶端把用戶名和認證串、用戶名、密碼組成的新串的MD5一併發給服務器請求登陸——〉網絡/協議解析模塊把客戶端請求以及它的用戶標誌轉發給用戶帳號管理模塊——〉用戶帳號管理模塊首先檢查列表中是否有該用戶標誌的數據,如果有則繼續——〉從數據庫中取出用戶名和密碼,然後從列表中取出認證串,生成MD5,看是否一致,如果一致,則表示登陸成功,服務器生成會話加密密鑰,以後的所有與服務器的會話信息都採用此密鑰加密和解密——〉網絡/協議解析模塊把結果發送給客戶端,如果成功——〉網絡/協議解析模塊把該用戶的用戶標誌和會話加密密鑰保存在客戶狀態模塊中。
網絡解析模塊應該保存一個最近的登陸用戶列表的緩存,該列表保存的信息應該有IP和端口,還有加密密鑰,最後一次訪問的時間。在該列表的用戶,如果超過一定時間(例如一分鐘)沒有訪問,就要從該列表中刪除。該列表的主要用途用於快速的查找登陸用戶(這樣頻繁訪問服務器的用戶登錄檢查就不需要叢客戶狀態模塊中查詢了,提高效率),如果在此列表中查找不到,則向客戶狀態模塊查找,如果找到了,則把用戶添加到此列表中。如果找不到,則表示不在線。
第一,根據不同的類型把數據報解密後(如果需要解密)分發給各個具體的處理模塊。在分發前,首先檢查該用戶是否登陸,如果沒有,則直接告訴客戶端一個錯誤。對於新建用戶,登陸命令,獲取認證字符串的命令不需要檢查是否已經登陸。
第二,自己處理相關的消息,目前自己處理的消息包括心跳消息和客戶端請求建立直連的命令,還有任何數據包的格式不對或者版本不對的情況處理,則該模塊自己就處理了。
第三,把用戶發送消息時的狀態提交給客戶狀態模塊,其中包括用戶唯一標誌。如果用戶在發送消息時,地址已經修改了,那麼唯一標誌必須保持不變,但是用戶標誌列表中的用戶地址數據必須跟着修改。
第四,包各個模塊發送給客戶端的消息加密後(如果需要)處理髮送給客戶端。
該模塊的功能如下:
第一、 保存並操作所有當前在線的用戶信息,包括用戶的登陸時間,用戶標誌,用戶狀態(隱身等),用戶帳號。提供給其他模塊查詢某個用戶是否登陸。
第二、 處理獲取在線好友的消息,如果收到此命令,則通過用戶帳號管理模塊查找該用的好友列表,同時查找當前的在線用戶列表,然後就得到在線好友列表。
第三、 處理用戶狀態改變的命令,如果收到用戶的狀態改變消息(如登錄、登出、隱身等),則查找該用戶的在線好友列表,然後一一通知。
第四、 如果長時間沒有收到用戶的消息,則認爲該用戶因爲意外的原因而斷線,則自動認爲登出。客戶端在沒有任何消息需要發送時,會定時的向服務器發送心跳命令,告訴服務器客戶端在線,如果連續一段時間沒有收到心跳信息,則認爲用戶已經斷線。
第五、 保存並操作在線羣組信息。給其他模塊提供獲取特定羣組或者場景中的用戶列表功能。
處理所有的消息轉發,包括羣消息,好友消息。
對於好友消息,該消息處理模塊首先通過客戶狀態模塊檢查好友是否在線,如果在線,則把好友消息發送過去,如果不在線,則不發送。
對於羣消息,如果是針對普通的羣組消息,則通過客戶狀態模塊得到該羣組的在線用戶列表,然後給每個人發送該消息,除了自己。
如果是場景中的公有消息,則先檢查該用戶所在場景的位置,然後計算出能夠聽到該用戶的場景中的其他用戶的用戶列表,然後給每個人發送消息。計算的算法參考每個場景用戶的座標,其中在特定場景中的用戶不參與運算,除非在同一個的特定場景中的用戶才參與運算。
注意:對於場景消息,如果客戶端不是以場景方式登錄的,那麼就不能發送和接收場景消息。
處理所有場景動作,該消息只有場景用戶方式登錄的才能發送和接收動作命令。服務器接收用戶的動作命令,計算出用戶所在的場景中能夠看到的人的列表,然後一一發送命令給該用戶。計算的算法參考每個場景用戶的座標,其中在特定場景中的用戶不參與運算,除非在同一個的特定場景中的用戶才參與運算。
6. 數據均衡處理模塊:
該模塊主要爲了分佈式處理,服務器負載平衡而設計,主要發出網絡服務器重定向的命令,對於這些命令,所有客戶端都必須處理,因爲一旦服務器發出了這個命令後,就在此服務器不再保存該用戶信息了。
目前該模塊不實現。
http://blog.csdn.net/sanfengshou/article/details/5664223