專利名稱:為客戶端分配應(yīng)用服務(wù)器地址的方法、服務(wù)器及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種為客戶端分配應(yīng)用服務(wù)器地址的方法、 服務(wù)器及系統(tǒng)。
背景技術(shù):
隨著各種數(shù)據(jù)業(yè)務(wù)的發(fā)展,特別是即時消息業(yè)務(wù)的快速發(fā)展,對應(yīng)用服務(wù)器的容 量要求越來越高,如何解決應(yīng)用服務(wù)器的負(fù)荷分擔(dān)和自動容災(zāi)問題,已經(jīng)成為應(yīng)用服務(wù)器 發(fā)展過程中的一個重要課題?,F(xiàn)有技術(shù)中,通過增加多個應(yīng)用服務(wù)器,為各個客戶端需要配置固定的應(yīng)用服務(wù) 器,來解決即時消息的負(fù)荷分擔(dān),利用備份服務(wù)器對應(yīng)用服務(wù)器宕機情況進行自動容災(zāi)。假 設(shè)客戶端A固定配置到應(yīng)用服務(wù)器1,客戶端B固定配置到應(yīng)用服務(wù)器2。當(dāng)應(yīng)用服務(wù)器2 宕機時,根據(jù)配置的固定備份服務(wù)器地址重新登錄。在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下缺陷各個客戶端需 要配置固定的應(yīng)用服務(wù)器,當(dāng)固定配置的應(yīng)用服務(wù)器發(fā)生故障的時候,客戶端就無法登陸 到應(yīng)用服務(wù)器。
發(fā)明內(nèi)容
本發(fā)明實施例提出一種為客戶端分配應(yīng)用服務(wù)器地址的方法、服務(wù)器及系統(tǒng),以 根據(jù)客戶端信息和應(yīng)用服務(wù)器總數(shù)動態(tài)分配應(yīng)用服務(wù)器。本發(fā)明實施例提供了一種為客戶端分配應(yīng)用服務(wù)器地址的方法,包括接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息;根據(jù)所述客戶端信息,獲取所述客戶端的編號;根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),為所述客戶端分配將登錄的應(yīng)用服務(wù) 器地址;向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含被分配的所述客戶端將 登錄的應(yīng)用服務(wù)器地址。本發(fā)明實施例還提供了一種為客戶端分配應(yīng)用服務(wù)器地址的方法,包括接收聊天消息,所述聊天消息中包含接收方的客戶端信息;根據(jù)所述接收方的客戶端信息,獲取所述接收方的客戶端編號;根據(jù)所述接收方的客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述接收方客戶端所登錄 的應(yīng)用服務(wù)器編號;根據(jù)所述接收方的客戶端所登錄的應(yīng)用服務(wù)器編號,路由所述聊天消息。本發(fā)明實施例還提供了一種連接服務(wù)器,包括接收單元,用于接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息;客戶端編號獲取單元,根據(jù)所述客戶端信息,獲取所述客戶端的編號;分配單元,用于根據(jù)所述客戶端信息為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址;發(fā)送單元,用于向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含被分配 的所述客戶端將登錄的應(yīng)用服務(wù)器地址。本發(fā)明實施例還提供了一種應(yīng)用服務(wù)器,包括接收單元,用于接收聊天消息,所述聊天消息中包含接收方的客戶端信息;客戶端編號獲取單元,用于根據(jù)所述客戶端信息,獲取所述客戶端編號;應(yīng)用服務(wù)器編號獲取單元,用于根據(jù)所述客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所 述客戶端所登錄的應(yīng)用服務(wù)器編號;路由單元,用于根據(jù)所述客戶端所登錄的應(yīng)用服務(wù)器編號,路由所述聊天消息。本發(fā)明實施例還提供了一種通信系統(tǒng),包括連接服務(wù)器,用于接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息; 根據(jù)所述客戶端信息,獲取所述客戶端的編號;根據(jù)所述客戶端信息為所述客戶端分配將 登錄的應(yīng)用服務(wù)器地址;向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含被分配 的所述客戶端將登錄的應(yīng)用服務(wù)器地址;至少兩個應(yīng)用服務(wù)器,用于接收聊天消息,所述聊天消息中包含接收方的客戶端 信息;根據(jù)所述客戶端信息,獲取所述客戶端編號;根據(jù)所述客戶端編號和應(yīng)用服務(wù)器總 數(shù),獲取所述客戶端所登錄的應(yīng)用服務(wù)器編號;根據(jù)所述客戶端所登錄的應(yīng)用服務(wù)器編號, 路由所述聊天消息。上述實施例通過客戶端信息獲取客戶端編號,并根據(jù)客戶端編號與服務(wù)器總數(shù)為 客戶端分配將登錄的應(yīng)用服務(wù)器地址,并且,在接收到登錄請求消息的情況下為客戶端分 配應(yīng)用服務(wù)器,實現(xiàn)了根據(jù)客戶端信息和應(yīng)用服務(wù)器總數(shù)為客戶端動態(tài)地分配將登錄的應(yīng) 用服務(wù)器,提高了用戶的體驗。下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進一步的詳細描述。
圖1為本發(fā)明實施鑼
圖2為本發(fā)明實施鑼
圖3為本發(fā)明實施鑼
圖4為本發(fā)明實施鑼
圖5為本發(fā)明實施鑼
圖6為本發(fā)明實施鑼
圖7為本發(fā)明實施鑼
圖8為本發(fā)明實施鑼
圖9為本發(fā)明實施鑼
圖10為本發(fā)明實施
圖11為本發(fā)明實施
一種連接服務(wù)器的結(jié)構(gòu)示意圖; 另一種連接服務(wù)器的結(jié)構(gòu)示意圖; 一種應(yīng)用服務(wù)器的結(jié)構(gòu)示意圖; 一種通信系統(tǒng)的結(jié)構(gòu)示意圖; 一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖; 另一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖 另一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖 又一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖 又一種為客戶端分配應(yīng)用服務(wù)器地址的方法中的流程圖 列又一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖; 列又一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖。
具體實施例方式
圖1為本發(fā)明實施例一種連接服務(wù)器的結(jié)構(gòu)示意圖。該連接服務(wù)器包括接收單元11、客戶端編號獲取單元12、分配單元13及發(fā)送單元14。接收單元11用于接收客戶端 登錄請求消息,所述登錄請求消息包含客戶端名稱、標(biāo)識、地址等客戶端信息??蛻舳司幪?獲取單元12根據(jù)所述客戶端信息,獲取所述客戶端的編號。如通過對客戶端名稱或登錄請 求消息中的其他客戶端信息進行第五種信息-摘要算法(Message-Digest Algorithm 5, MD5)計算獲得所述客戶端的編號。分配單元13用于根據(jù)所述客戶端信息為所述客戶端分 配將登錄的應(yīng)用服務(wù)器地址;發(fā)送單元14用于向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄 響應(yīng)消息包含所述被分配的客戶端將登錄的應(yīng)用服務(wù)器地址。在應(yīng)用服務(wù)器宕機或恢復(fù) 時,還可發(fā)送宕機消息或恢復(fù)消息通知各個應(yīng)用服務(wù)器更新宕機列表或恢復(fù)列表。本實施例中,連接服務(wù)器通過根據(jù)客戶端信息為客戶端分配將登錄的應(yīng)用服務(wù)器 地址,實現(xiàn)了根據(jù)客戶端名稱為客戶端隨機分配服務(wù)器。所述分配單元13可具體用于對所述客戶端編號按所述應(yīng)用服務(wù)器總數(shù)取模,獲 得取模值,并確定所述取模值為編號的應(yīng)用服務(wù)器為正常工作狀態(tài);并且為所述客戶端分 配將登錄的應(yīng)用服務(wù)器地址,所述應(yīng)用服務(wù)器地址具體為所述取模值為編號的應(yīng)用服務(wù)器 的地址。所述服務(wù)器總數(shù)根據(jù)服務(wù)器列表獲得;所述服務(wù)器列表通過檢測心跳消息建立,包 括應(yīng)用服務(wù)器地址、應(yīng)用服務(wù)器對應(yīng)的客戶端名稱及工作狀態(tài);所述服務(wù)器總數(shù)為所述服 務(wù)器列表中所有應(yīng)用服務(wù)器的數(shù)量。分配單元13在所述服務(wù)器列表中以所述取模值為編 號的應(yīng)用服務(wù)器的工作狀態(tài)為正常的情況下,將以所述取模值為編號的應(yīng)用服務(wù)器分配給 發(fā)送所述登錄請求消息的客戶端,以便所述客戶端自動登錄分配的應(yīng)用服務(wù)器。本實施例中,連接服務(wù)器通過MD5將客戶端名稱轉(zhuǎn)換為客戶端編號,并根據(jù)客戶 端編號按服務(wù)器總數(shù)取值為客戶端分配相應(yīng)的應(yīng)用服務(wù)器,使得連接服務(wù)器能夠通過根據(jù) 客戶端名稱為客戶端隨機分配應(yīng)用服務(wù)器。并且,本實施例中的服務(wù)器作為連接客戶端與 應(yīng)用服務(wù)器的唯一的連接服務(wù)器。用戶通過客戶端登錄服務(wù)器時,只需輸入連接服務(wù)器的 地址即可。圖2為本發(fā)明實施例另一種連接服務(wù)器的結(jié)構(gòu)示意圖。該連接服務(wù)器可進一步包 括存儲單元21。存儲單元21用于存儲服務(wù)器列表,所述服務(wù)器列表包括應(yīng)用服務(wù)器地址; 此時,分配單元22可具體用于根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),在所述服務(wù)器列 表中的所述客戶端信息,為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址。所述存儲單元21存 儲的服務(wù)器列表還包括各個應(yīng)用服務(wù)器的能力和工作狀態(tài)。另一連接服務(wù)器實施例可進一步包括更新單元。所述應(yīng)用服務(wù)器發(fā)生宕機或宕 機后恢復(fù)時,更新單元更新所述服務(wù)器列表,將所述宕機的應(yīng)用服務(wù)器的工作狀態(tài)對應(yīng)的 更新為宕機或正常。本實施例中,連接服務(wù)器通過存儲單元存儲服務(wù)器列表,使得連接服務(wù)器在本地 即可獲得應(yīng)用服務(wù)器總數(shù)及相應(yīng)的工作狀態(tài),提高了連接服務(wù)器的分配效率。另一連接服務(wù)器實施例可進一步包括重新分配單元。該重新分配單元用于利用 所述服務(wù)器列表中工作狀態(tài)為正常的應(yīng)用服務(wù)器的能力,計算所述各個工作狀態(tài)為正常的 應(yīng)用服務(wù)器的權(quán)重;在所述各個工作狀態(tài)為正常的應(yīng)用服務(wù)器分配權(quán)重區(qū)間,并取隨機數(shù); 重新為所述客戶端分配將登錄的應(yīng)用服務(wù)器的地址,所述客戶端分配將登錄的應(yīng)用服務(wù)器 的地址具體為所述隨機數(shù)所在的權(quán)重區(qū)間對應(yīng)的應(yīng)用服務(wù)器的地址。圖3為本發(fā)明實施例一種應(yīng)用服務(wù)器的結(jié)構(gòu)示意圖。該應(yīng)用服務(wù)器包括接收單元31、客戶端編號獲取單元32、應(yīng)用服務(wù)器編號獲取單元33及路由單元34。接收單元31用 于接收聊天消息,所述聊天消息中包含接收方的客戶端信息??蛻舳司幪柅@取單元32用于 根據(jù)所述客戶端信息,獲取所述客戶端編號;應(yīng)用服務(wù)器編號獲取單元33用于根據(jù)所述客 戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述客戶端所登錄的應(yīng)用服務(wù)器編號;路由單元34用于 根據(jù)所述客戶端所登錄的應(yīng)用服務(wù)器編號,路由所述聊天消息。路由單元34可具體用于確 定所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號與發(fā)送方的客戶端登錄的應(yīng)用服務(wù)器編號 相同,路由所述聊天消息至接收方客戶端;或者確定所述接收方的客戶端登錄的應(yīng)用服務(wù) 器編號與發(fā)送方的客戶端登錄的應(yīng)用服務(wù)器編號不相同,當(dāng)存儲的宕機列表或恢復(fù)列表中 不存在所述接收方的客戶端編號時,從存儲的服務(wù)器列表中獲取所述接收方的客戶端登錄 的應(yīng)用服務(wù)器編號對應(yīng)的應(yīng)用服務(wù)器地址,根據(jù)所述應(yīng)用服務(wù)器地址,路由所述聊天消息; 當(dāng)所述宕機列表或所述恢復(fù)列表中存在所述接收方的客戶端編號時,根據(jù)所述宕機列表或 所述恢復(fù)列表中的客戶端編號所登錄的應(yīng)用服務(wù)器地址,路由所述聊天消息。本實施例通過根據(jù)客戶端信息為客戶端分配將登錄的應(yīng)用服務(wù)器地址,實現(xiàn)了根 據(jù)客戶端信息為客戶端隨機分配服務(wù)器。并且,在接收到登錄請求消息的情況下為客戶端 分配服務(wù)器,使得可通過唯一設(shè)備來實現(xiàn)該功能,從而使用戶通過客戶端登錄服務(wù)器時,只 需輸入連接服務(wù)器的地址便能夠登錄不同的應(yīng)用服務(wù)器。另一應(yīng)用服務(wù)器實施例可進一步包括更新單元。該更新單元用于根據(jù)宕機消息 更新宕機列表,或者根據(jù)恢復(fù)消息,更新恢復(fù)列表。圖4為本發(fā)明實施例一種通信系統(tǒng)的結(jié)構(gòu)示意圖。該系統(tǒng)包括連接服務(wù)器和應(yīng)用 服務(wù)器。連接服務(wù)器用于接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息;根 據(jù)所述客戶端信息,獲取所述客戶端的編號;根據(jù)所述客戶端信息為所述客戶端分配將登 錄的應(yīng)用服務(wù)器地址;向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含所述被分 配的客戶端將登錄的應(yīng)用服務(wù)器地址。應(yīng)用服務(wù)器至少有兩個,用于接收聊天消息,所述聊 天消息中包含接收方的客戶端信息;根據(jù)所述客戶端信息,獲取所述客戶端編號;根據(jù)所 述客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述客戶端所登錄的應(yīng)用服務(wù)器編號;根據(jù)所述客 戶端所登錄的應(yīng)用服務(wù)器編號,路由所述聊天消息。在中,連接服務(wù)器可為上述連接服務(wù)器 實施例中的連接服務(wù)器,應(yīng)用服務(wù)器可上述服務(wù)器實施例中的應(yīng)用服務(wù)器。本實施例通過根據(jù)客戶端信息為客戶端分配將登錄的應(yīng)用服務(wù)器地址,實現(xiàn)了根 據(jù)客戶端信息為客戶端隨機分配服務(wù)器。并且,在接收到登錄請求消息的情況下為客戶端 分配服務(wù)器,使得可通過唯一設(shè)備來實現(xiàn)該功能,從而使用戶通過客戶端登錄服務(wù)器時,只 需輸入連接服務(wù)器的地址便能夠登錄不同的應(yīng)用服務(wù)器。圖5為本發(fā)明實施例一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖。該方法 可包括步驟501、連接服務(wù)器接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信 息,如客戶端名稱、地址、標(biāo)識等。步驟502、根據(jù)所述客戶端信息,獲取所述客戶端的編號;如利用MD5計算獲得客
戶端編號。步驟503、根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),為所述客戶端分配將登錄的 應(yīng)用服務(wù)器地址;可包括對所述客戶端編號按所述應(yīng)用服務(wù)器總數(shù)取模,獲得取模值,并確定所述編號為取模值對應(yīng)的應(yīng)用服務(wù)器為正常工作狀態(tài);為所述客戶端分配將登錄的應(yīng) 用服務(wù)器地址,所述應(yīng)用服務(wù)器地址具體為所述編號為所述取模值對應(yīng)的應(yīng)用服務(wù)器的地址。步驟504、向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含所述被分配的 客戶端將登錄的應(yīng)用服務(wù)器地址。如對所述客戶端編號按服務(wù)器總數(shù)取模,獲得取模值, 并確定所述編號為取模值對應(yīng)的應(yīng)用服務(wù)器為正常工作狀態(tài);為所述客戶端分配將登錄 的應(yīng)用服務(wù)器地址,所述應(yīng)用服務(wù)器地址具體為所述編號為取模值對應(yīng)的應(yīng)用服務(wù)器的地 址。本實施例通過根據(jù)客戶端信息為客戶端分配將登錄的應(yīng)用服務(wù)器地址,實現(xiàn)了根 據(jù)客戶端信息為客戶端隨機分配服務(wù)器。并且,在接收到登錄請求消息的情況下為客戶端 分配服務(wù)器,使得可通過唯一設(shè)備來實現(xiàn)該功能,從而使用戶通過客戶端登錄服務(wù)器時,只 需輸入連接服務(wù)器的地址便能夠登錄不同的應(yīng)用服務(wù)器。圖6為本發(fā)明實施例另一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖,其中 連接服務(wù)器連接多個應(yīng)用服務(wù)器與多個客戶端(圖中只畫了一個)的交互,客戶端通過連 接服務(wù)器登錄應(yīng)用服務(wù)器1,假設(shè)此時該應(yīng)用服務(wù)器1發(fā)生宕機,處理流程包括步驟601、客戶端發(fā)送登錄請求消息給統(tǒng)一的連接服務(wù)器,登錄請求消息包括客戶 端信息,客戶端信息可以為客戶端名稱、客戶端標(biāo)識,客戶端的地址等信息??蛻舳诉€可在 登錄請求消息中設(shè)置一字段,該字段用于連接服務(wù)器分配好應(yīng)用服務(wù)器后,將該應(yīng)用服務(wù) 器地址填寫該字段,并返回給客戶端,以便客戶端能夠自動登陸該應(yīng)用服務(wù)器中。步驟602、連接服務(wù)器根據(jù)登錄請求消息的客戶端信息獲取客戶端編號。連接服務(wù)器獲取客戶端編號的方式有多種,比如可以利用MD5算法,并根據(jù)客戶 端名稱獲取客戶端編號,也可以根據(jù)客戶端標(biāo)識,連接服務(wù)器隨機分配唯一的客戶端編號, 還可以根據(jù)客戶端地址來分配唯一的客戶端編號。例如,連接服務(wù)器可以通過根據(jù)客戶端 名稱進行MD5數(shù)值化,即將客戶端名稱對應(yīng)的字符串通過字符串變換算法變換成一個整 數(shù),該整數(shù)即為戶端編號。步驟603、連接服務(wù)器根據(jù)客戶端編號按應(yīng)用服務(wù)器總數(shù)取模,進行取模計算,根 據(jù)取模后的值及各個應(yīng)用服務(wù)器工作狀態(tài)分配合適的應(yīng)用服務(wù)器地址給發(fā)送客戶端,并向 客戶端返回登陸響應(yīng)消息,該登陸響應(yīng)消息中包含上述為客戶端分配的應(yīng)用服務(wù)器地址, 假設(shè)該應(yīng)用服務(wù)器為應(yīng)用服務(wù)器1,其中工作狀態(tài)包含正常工作狀態(tài),宕機狀態(tài)等。在連接服務(wù)器中存儲了服務(wù)器列表,包括各個與連接服務(wù)器連接的應(yīng)用服務(wù)器的 信息,該信息包括應(yīng)用服務(wù)器地址、應(yīng)用服務(wù)器編號、應(yīng)用服務(wù)器的工作狀態(tài)、應(yīng)用服務(wù)器 業(yè)務(wù)轉(zhuǎn)發(fā)能力及對應(yīng)的客戶端名稱;并且該服務(wù)器列表還統(tǒng)計了與該連接服務(wù)器相連接的 所有的應(yīng)用服務(wù)器的總數(shù)。連接服務(wù)器還根據(jù)對客戶端編號按應(yīng)用服務(wù)器總數(shù)取模,獲取取模值,該取模值 即為客戶端對應(yīng)的應(yīng)用服務(wù)器的編號。例如客戶端編號為1,應(yīng)用服務(wù)器總數(shù)為9,則取模 值為lmod9 = 1,該取模值即為客戶端對應(yīng)的應(yīng)用服務(wù)器的編號。例如以取模值為服務(wù)器編號的應(yīng)用服務(wù)器的工作狀態(tài)正常時,將該應(yīng)用服務(wù)器 1的地址填寫登錄請求消息中設(shè)置的字段,并向給客戶端發(fā)送登錄響應(yīng)消息,該登錄響應(yīng)消 息包含上述的應(yīng)用服務(wù)器1的地址。其中,各個應(yīng)用服務(wù)器的工作狀態(tài)由連接服務(wù)器通過檢測應(yīng)用服務(wù)器定時發(fā)送的心跳消息獲得。以取模值為服務(wù)器編號的應(yīng)用服務(wù)器的工作狀態(tài)宕機時,執(zhí)行步驟608,為客戶端 重新分配應(yīng)用服務(wù)器。步驟604、客戶端收到登陸響應(yīng)消息,根據(jù)該應(yīng)用服務(wù)器1的地址登錄該應(yīng)用服務(wù) 器??蛻舳耸盏竭B接服務(wù)器返回的登陸響應(yīng)消息后,根據(jù)該字段中的值直接登錄連接服務(wù) 器分配的應(yīng)用服務(wù)器1,無需用戶重新輸入登錄地址。步驟605、應(yīng)用服務(wù)器1由于自身原因或其他原因發(fā)生宕機。步驟606、連接服務(wù)器通過心跳消息檢測到應(yīng)用服務(wù)器1宕機,連接服務(wù)器把正常 應(yīng)用服務(wù)器數(shù)目自動減一,并更新服務(wù)器列表和宕機列表,將服務(wù)器列表中該應(yīng)用服務(wù)器 的工作狀態(tài)更新為宕機。該宕機列表存儲了連接服務(wù)器所有連接的應(yīng)用服務(wù)器的宕機信 息,宕機信息包括該宕機服務(wù)器對應(yīng)的客戶端編號、宕機的應(yīng)用服務(wù)器地址信息等。步驟607、客戶端通過心跳消息檢測到應(yīng)用服務(wù)器1宕機后,客戶端重新發(fā)送登錄 請求消息到連接服務(wù)器。步驟608、連接服務(wù)器按步驟603的操作計算客戶端應(yīng)該登錄的服務(wù)器后,通過服 務(wù)器列表判斷該客戶端登錄的服務(wù)器狀態(tài)是宕機狀態(tài)。連接服務(wù)器根據(jù)各個應(yīng)用服務(wù)器的 能力重新分配該客戶端對應(yīng)的應(yīng)用服務(wù)器;并向客戶端返回的的登錄響應(yīng)消息,該登錄響 應(yīng)消息包含重新分配該客戶端對應(yīng)的應(yīng)用服務(wù)器的地址。例如根據(jù)各個應(yīng)用服務(wù)器的能 力計算出各個正常工作服務(wù)器的權(quán)重,比如按權(quán)重從區(qū)間W,l]中為各個應(yīng)用服務(wù)器分配 權(quán)重區(qū)間,然后在區(qū)間W,l]中取隨機數(shù)。隨機數(shù)落在某個權(quán)重區(qū)間,連接服務(wù)器根據(jù)則分 配對應(yīng)的新應(yīng)用服務(wù)器,如重新分配應(yīng)用服務(wù)器2為客戶端登錄的應(yīng)用服務(wù)器。步驟609、客戶端接收登錄響應(yīng)消息后,重新登陸新的應(yīng)用服務(wù)器2。步驟610、連接服務(wù)器向所有與其連接的應(yīng)用服務(wù)器發(fā)送宕機消息,所述宕機消 息包含把上述原登錄到宕機應(yīng)用服務(wù)器對應(yīng)的客戶端編號、該客戶端新登錄應(yīng)用服務(wù)器地 址、和宕機應(yīng)用服務(wù)器地址等信息通知所有的應(yīng)用服務(wù)器。步驟611、各應(yīng)用服務(wù)器收到連接服務(wù)器發(fā)送的宕機消息后,更新本服務(wù)器存儲宕 機列表。各應(yīng)用服務(wù)器均維護有一個宕機列表,包括原登錄到宕機應(yīng)用服務(wù)器對應(yīng)的客戶 端標(biāo)識、該客戶端新登錄應(yīng)用服務(wù)器地及宕機應(yīng)用服務(wù)器地址。該宕機列表初始狀態(tài)為空, 當(dāng)接收到連接服務(wù)器發(fā)送的宕機消息后進行填充。步驟612、宕機的應(yīng)用服務(wù)器1由于建立連接或其他原因恢復(fù)正常工作。步驟613、連接服務(wù)器通過心跳消息檢測到某宕機的應(yīng)用服務(wù)器恢復(fù)正常,如應(yīng)用 服務(wù)器1恢復(fù)正常,更新服務(wù)器列表,將宕機的應(yīng)用服務(wù)器的工作狀態(tài)恢復(fù)為正常。連接服 務(wù)器還向其他應(yīng)用服務(wù)器發(fā)送恢復(fù)消息,該恢復(fù)消息中包含了該宕機的應(yīng)用服務(wù)器恢復(fù)正
常的信息。步驟614、各個應(yīng)用服務(wù)器接收到連接服務(wù)器恢復(fù)消息后,從宕機列表中的宕機信 息復(fù)制到恢復(fù)列表中,同時刪除宕機列表中宕機信息。各應(yīng)用服務(wù)器均維護有一個恢復(fù)列 表,包括原登錄到宕機應(yīng)用服務(wù)器對應(yīng)的客戶端標(biāo)識、該客戶端新登錄應(yīng)用服務(wù)器地及宕 機應(yīng)用服務(wù)器地址。該恢復(fù)列表初始狀態(tài)為空,當(dāng)應(yīng)用服務(wù)器接收到連接服務(wù)器發(fā)送的恢 復(fù)消息后進行填充。 至此,連接服務(wù)器已完成自動容災(zāi)和負(fù)荷分擔(dān)。
客戶端下線后,該方法可進一步包括以下步驟步驟615、客戶端再次登錄應(yīng)用服務(wù)器,這時自動登錄連接服務(wù)器重新分配的應(yīng)用服務(wù)器2。步驟616、被登錄的應(yīng)用服務(wù)器2發(fā)現(xiàn)該客戶端在恢復(fù)列表中,返回登錄指示給客 戶端,如該指示為空的信息,并刪除恢復(fù)列表對應(yīng)的記錄。應(yīng)用服務(wù)器2也可以通過發(fā)送消 息告知客戶端重新登陸連接服務(wù)器,如在消息中設(shè)置某一字段的值,當(dāng)客戶端判斷該字段 的值獲知是否重新登錄連接服務(wù)器。步驟617、客戶端收到登錄指示后,發(fā)送登錄請求消息到連接服務(wù)器,請求獲取新 的應(yīng)用服務(wù)器;連接服務(wù)器收到登錄請求消息后,從步驟602重新開始處理,為客戶端重新 分配應(yīng)用服務(wù)器。本實施例通過客戶端分配適合的應(yīng)用服務(wù)器,實現(xiàn)了根據(jù)客戶端信息為客戶端隨 機分配服務(wù)器。并且,在登錄的服務(wù)器宕機的情況下,根據(jù)正常應(yīng)用服務(wù)器的能力為客戶端 重新分配應(yīng)用服務(wù)器,實現(xiàn)了多個應(yīng)用服務(wù)器的自動容災(zāi)和負(fù)荷分擔(dān)。在多個應(yīng)用服務(wù)器進行自動容災(zāi)和負(fù)荷分擔(dān)的過程中,可進一步包括應(yīng)用服務(wù) 器收到客戶端發(fā)送的即時消息和/或好友狀態(tài)獲取消息時,對接收方客戶端編號、發(fā)送方 客戶端編號分別按照上述方法獲取對應(yīng)的應(yīng)用服務(wù)器編號,確定即時消息和/或好友狀態(tài) 應(yīng)該被發(fā)送的應(yīng)用服務(wù)器地址,然后將該即時消息和/或好友狀態(tài)信息發(fā)送到確定的應(yīng)用 服務(wù)器中。確定即時消息和/或好友狀態(tài)應(yīng)該被發(fā)送的應(yīng)用服務(wù)器地址過程包括在接收 方客戶端編號獲取到的對應(yīng)的應(yīng)用服務(wù)器編號與發(fā)送方客戶端編號獲取到的對應(yīng)的應(yīng)用 服務(wù)器編號相等的情況下,連接服務(wù)器將路由即時消息和/或好友狀態(tài)信息路由到上述發(fā) 送方客戶端編號獲取到的對應(yīng)的應(yīng)用服務(wù)器。在接收方客戶端編號獲取到的對應(yīng)的應(yīng)用服 務(wù)器編號與發(fā)送方客戶端編號獲取到的對應(yīng)的應(yīng)用服務(wù)器編號不相等的情況下,若在連接 服務(wù)器中宕機列表和恢復(fù)列表中無接收方客戶端編號,則獲取接收方客戶端對應(yīng)的應(yīng)用服 務(wù)器編號的地址,根據(jù)該地址,將即時消息和/或好友狀態(tài)信息路由到該地址對應(yīng)的應(yīng)用 服務(wù)器;若在宕機列表或恢復(fù)列表中有接收方編號,則路由即時消息和/或好友狀態(tài)信息 到宕機列表或恢復(fù)列表中客戶端對應(yīng)的新應(yīng)用服務(wù)器。假設(shè)有5個應(yīng)用服務(wù)器,其中各個應(yīng)用服務(wù)器地址分別為ServerJK Server_U Server_2,Server_3,Server_4 ; 1個連接服務(wù)器,地址為IPl ;6個客戶端,登錄名稱分別為 A、B、C、D、E、F。以該環(huán)境為例對本發(fā)明實施例為客戶端分配應(yīng)用服務(wù)器地址的方法作進一 步說明。如圖7所示,包括步驟701、客戶端A、B、C、D、E、F分別發(fā)送登錄請求消息到連接服務(wù)器,登錄請求 消息包括客戶端信息,客戶端信息可以為客戶端名稱、客戶端標(biāo)識,客戶端的地址等信息。步驟702、連接服務(wù)器根據(jù)登錄請求消息的客戶端信息獲取客戶端編號。例如連接服務(wù)器對客戶端名稱A、B、C、D、E、F分別進行MD5數(shù)值化,得到客戶端 編號。如客戶端A的編號=MD5(A) =5,客戶端B的編號=MD5(B) =6,客戶端C的編號 =MD5 (C) = 11,客戶端D的編號=MD5(D) = 7,客戶端E的編號=MD5 (E) =8,客戶端F 的編號=MD5 (F) = 9。步驟703、連接服務(wù)器根據(jù)客戶端編號按應(yīng)用服務(wù)器總數(shù)5取模5mod5 = 0, 6mod5 = 1,llmod5 = l,7mod5 = 2,8mod5 = 3,9mod5 = 4,即對應(yīng)于客戶端編號 5、6、11、7、8、9分別得到應(yīng)用服務(wù)器編號(0,1,1,2,3,4),由于編號為0、1、2、3、4的應(yīng)用服務(wù)器工作狀 態(tài)均為正常,因而將這些應(yīng)用服務(wù)器編號對應(yīng)的地址通過登錄響應(yīng)消息地返回給相應(yīng)的客 戶端。即為客戶端A分配編號為O的應(yīng)用服務(wù)器,客戶端B、C分配編號為1的應(yīng)用服務(wù)器, 客戶端D分配編號為2的應(yīng)用服務(wù)器,客戶端E分配編號為3的應(yīng)用服務(wù)器,客戶端F分配 編號為4的應(yīng)用服務(wù)器。并且此時連接服務(wù)器中保存有如表1所示的服務(wù)器列表。表1服務(wù)器列表
二作狀態(tài)ι正常ι正常ι正常ι正常ι正常步驟704、客戶端A、B、C、D、E、F收到服務(wù)器列表后,分別登錄編號為0,1,1,2,3,
4的應(yīng)用服務(wù)器。步驟705、假設(shè)原編號為2的應(yīng)用服務(wù)器出現(xiàn)宕機情況,即當(dāng)連接服務(wù)器通過心跳 消息檢測地址為SerVer_2的應(yīng)用服務(wù)器宕機后,連接服務(wù)器中存儲的正常工作應(yīng)用服務(wù) 器總數(shù)目減1變?yōu)?,對正常工作應(yīng)用服務(wù)器進行重新編號,并更新服務(wù)器列表。更新后的 服務(wù)器列表如表2所示。表2更新后的服務(wù)器列表
工作狀態(tài)_ι正常ι正常ι宏機ι正常ι正常步驟706、當(dāng)客戶端D通過心跳消息檢測第3個應(yīng)用服務(wù)器宕機后,重新發(fā)送登錄 請求到連接服務(wù)器。步驟707、連接服務(wù)器接收登錄請求后,獲知客戶端D對應(yīng)的地址SerVer_2為應(yīng)用服務(wù)器已經(jīng)宕機,根據(jù)其它各個正常應(yīng)用服務(wù)器的即時消息轉(zhuǎn)發(fā)能力計算出各個正常工作 服務(wù)器的權(quán)重,按權(quán)重從區(qū)間W,1]中為各個應(yīng)用服務(wù)器分配權(quán)重區(qū)間,然后從區(qū)間W,1] 取隨機數(shù),將隨機數(shù)所在權(quán)重區(qū)間對應(yīng)的應(yīng)用服務(wù)器分配給發(fā)送登錄請求的客戶端。并向 客戶端D發(fā)送登錄響應(yīng)消息,該登錄響應(yīng)消息包含重新分配給客戶端D的應(yīng)用服務(wù)器的地 址。
例如,本發(fā)明實施例不限定計算應(yīng)用服務(wù)器的方法,這里列舉本發(fā)明實施例的一 種計算應(yīng)用服務(wù)器的方法地址為server_o應(yīng)用服務(wù)器的權(quán)重=權(quán)重0/(權(quán)重0+權(quán)重1+ 權(quán)重 3+權(quán)重 4) = 100/100+200+100+100 = 1/5,權(quán)重區(qū)間 W-1/5];地址為Server_l應(yīng)用服務(wù)器的權(quán)重=權(quán)重1/(權(quán)重0+權(quán)重1+權(quán)重3+權(quán)重4) =200/100+200+100+100 = 2/5,權(quán)重區(qū)間(1/5-3/5];地址為Server_3應(yīng)用服務(wù)器的權(quán)重=權(quán)重3/(權(quán)重0+權(quán)重1+權(quán)重3+權(quán)重4) =100/100+200+100+100 = 1/5,權(quán)重區(qū)間(3/5-4/5];地址為Server_4應(yīng)用服務(wù)器的權(quán)重=權(quán)重4/(權(quán)重0+權(quán)重1+權(quán)重3+權(quán)重4) =100/100+200+100+100 = 1/5,權(quán)重區(qū)間(4/5-5/5];本發(fā)明實施例不限定分配應(yīng)用服務(wù)器與客戶端的對應(yīng)關(guān)系方法,這里列舉本發(fā)明 實施例的一種分配應(yīng)用服務(wù)器與即時消息的客戶端的對應(yīng)關(guān)系的方法若在區(qū)間
取 得的隨機數(shù)落在某個服務(wù)器的權(quán)重區(qū)間,即分配該服務(wù)器給客戶端。其中,隨機數(shù)通過函數(shù) Random(0,l)計算獲得,權(quán)重區(qū)間起點< Random(0,1) <=權(quán)重區(qū)間終點。假設(shè)Random(0, 1) = 0.3,1/5 < 0.3 < = 3/5屬于(1/5-3/5]區(qū)間,因此得到客戶端新登錄的地址為 Server_l應(yīng)用服務(wù)器。同時更新服務(wù)器列表,得到如表3所示的服務(wù)器列表。表3再次更新后的服務(wù)器列表 步驟708、客戶端D根據(jù)連接服務(wù)器返回的登錄響應(yīng)消息,登錄地址為ServerjS 用服務(wù)器。步驟709、連接服務(wù)器發(fā)送宕機消息到各個應(yīng)用服務(wù)器。宕機消息格式如表4所
表4宕機消息格式 步驟710、各個應(yīng)用服務(wù)器根據(jù)宕機消息,更新空的宕機列表,得到如表5所示的 更新后的宕機列表。表5更新后的宕機列表 步驟711、當(dāng)連接服務(wù)器檢測到地址為SerVer_2應(yīng)用服務(wù)器恢復(fù)正常時,發(fā)送恢 復(fù)消息到各個應(yīng)用服務(wù)器?;謴?fù)消息格式如表6所示。表6恢復(fù)消息格式 步驟712、各個應(yīng)用服務(wù)器收到恢復(fù)消息,刪除宕機列表中恢復(fù)服務(wù)器對應(yīng)的記 錄,同時在空的恢復(fù)列表中增加刪除的記錄。再次更新后的宕機列表如表7所示。表7再次更新后的宕機列表 更新后的恢復(fù)列表如表8所示。表8更新后的恢復(fù)列表 步驟713、客戶端D登錄地址為Server_l應(yīng)用服務(wù)器,地址為Server_l應(yīng)用服務(wù) 器檢測到恢復(fù)列表中有客戶端D,返回空的服務(wù)器列表給客戶端D。步驟714、客戶端D收到空的服務(wù)器列表后,發(fā)送登錄請求給連接服務(wù)器,請求重 新獲取新的應(yīng)用服務(wù)器的地址。步驟715、連接服務(wù)器收到客戶端D的登錄請求,從步驟702開始處理,返回原地址 為SerVer_2應(yīng)用服務(wù)器。并更新服務(wù)器列表,恢復(fù)到表1。
步驟716、客戶端D重新登錄到地址為Server_2應(yīng)用服務(wù)器。本實施例中,連接服 務(wù)器在地址為SerVer_2應(yīng)用服務(wù)器宕機的情況下,根據(jù)處于 正常工作狀態(tài)的應(yīng)用服務(wù)器的能力,為登錄該應(yīng)用服務(wù)器的客戶端分配業(yè)務(wù)轉(zhuǎn)發(fā)能力較高 的地址為server_i應(yīng)用服務(wù)器,合理有效地實現(xiàn)了自動容災(zāi)與負(fù)荷分擔(dān)。圖8為本發(fā)明實施例又一種為客戶端分配應(yīng)用服務(wù)器地址的方法的流程圖。該方 法包括步驟801、應(yīng)用服務(wù)器接收客戶端發(fā)送的聊天消息,所述聊天消息中包含接收方的 客戶端信息。聊天消息可以具體為即時消息,或者即時消息與獲取狀態(tài)消息的結(jié)合。步驟802、應(yīng)用服務(wù)器根據(jù)所述接收方的客戶端信息,獲取所述接收方的客戶端編號。步驟803、應(yīng)用服務(wù)器根據(jù)所述接收方的客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述 接收方客戶端所登錄的應(yīng)用服務(wù)器編號。步驟804、應(yīng)用服務(wù)器根據(jù)所述接收方的客戶端所登錄的應(yīng)用服務(wù)器編號,路由所 述聊天消息。上述步驟801中,所述聊天消息中還可包含發(fā)送方的客戶端信息。此時,為客戶 端分配應(yīng)用服務(wù)器地址的方法還可包括根據(jù)所述發(fā)送方的客戶端信息,獲取所述發(fā)送方 的客戶端編號;根據(jù)所述發(fā)送方的客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述發(fā)送方的客戶 端登錄的應(yīng)用服務(wù)器編號;上述步驟804可包括確定所述接收方的客戶端登錄的應(yīng)用服 務(wù)器編號與發(fā)送方的客戶端登錄的應(yīng)用服務(wù)器編號相同,路由所述聊天消息至接收方客戶 端;或者,確定所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號與發(fā)送方的客戶端登錄的應(yīng)用 服務(wù)器編號不相同,當(dāng)存儲的宕機列表或恢復(fù)列表中不存在所述接收方的客戶端編號時, 從存儲的服務(wù)器列表中獲取所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號對應(yīng)的應(yīng)用服務(wù) 器地址,根據(jù)所述應(yīng)用服務(wù)器地址,路由所述聊天消息;當(dāng)所述宕機列表或所述恢復(fù)列表中 存在所述接收方的客戶端編號時,根據(jù)所述宕機列表或所述恢復(fù)列表中的客戶端編號所登 錄的應(yīng)用服務(wù)器地址,路由所述聊天消息。當(dāng)連接服務(wù)器發(fā)送宕機消息時,該又一種為客戶端分配應(yīng)用服務(wù)器地址的方法實 施例還可包括應(yīng)用服務(wù)器接收宕機消息,更新所述宕機列表。當(dāng)連接服務(wù)器發(fā)送恢復(fù)消息時,該又一種為客戶端分配應(yīng)用服務(wù)器地址的方法實 施例還可包括應(yīng)用服務(wù)器接收恢復(fù)消息,更新所述恢復(fù)列表。本實施例中,應(yīng)用服務(wù)器能夠根據(jù)即時消息中接收方的客戶端信息獲取接收方的 客戶端編號,并根據(jù)客戶端編號及應(yīng)用服務(wù)器總數(shù)獲取接收客戶端所登錄的應(yīng)用服務(wù)器編 號,路由聊天消息,實現(xiàn)了聊天消息的智能路由。在上述圖7對應(yīng)的實施例的基礎(chǔ)上,當(dāng)客戶端B發(fā)送即時消息“今晚7點開會”給 客戶端C,并獲取客戶端C的狀態(tài)信息時,如圖9所示,本發(fā)明為客戶端分配應(yīng)用服務(wù)器地址 的方法實施例中路由聊天消息的過程包括步驟901、客戶端B把即時消息“今晚7點開會”發(fā)送到地址為Servers應(yīng)用服 務(wù)器,其中該即時消息還包含客戶端C信息,該客戶端C信息可以為客戶端名稱、客戶端標(biāo) 識、客戶端的地址等信息;同時發(fā)送獲取客戶端C的狀態(tài)信息的消息,或者將兩個消息封裝 成一個消息發(fā)送。
步驟902、地址為Servers應(yīng)用服務(wù)器根據(jù)客戶端C信息獲取上述客戶端C所登 錄的應(yīng)用服務(wù)器編號,并根據(jù)客戶端B信息獲取上述客戶端B所登錄的應(yīng)用服務(wù)器編號,比 較客戶端B所登錄的應(yīng)用服務(wù)器編號與客戶端C所登錄的應(yīng)用服務(wù)器編號是否相同。例如參見上述步驟702和步驟703,地址為Server_l應(yīng)用服務(wù)器分別對客戶端 B、C進行MD5數(shù)值化,并按服務(wù)器總數(shù)5取模,分別得到取模值均為1 ; 客戶端B、C按服務(wù)器總數(shù)取模后,因其取模值之差的絕對值為0,因此客戶端C也 登錄在本應(yīng)用服務(wù)器,從而無需路由即時消息和好友狀態(tài)信息到其他應(yīng)用服務(wù)器。步驟903、由于客戶端B所登錄的應(yīng)用服務(wù)器編號與客戶端C所登錄的應(yīng)用服務(wù) 器編號相同,地址為server_l應(yīng)用服務(wù)器根據(jù)客戶端C登錄的源地址轉(zhuǎn)發(fā)即時消息“今晚 7點開會”給客戶端C。步驟904、地址為Server_l獲取客戶端C的狀態(tài)信息。步驟905、將上述客戶端C的狀態(tài)信息返回給客戶端B。本實施例中,地址為server_l應(yīng)用服務(wù)器能夠根據(jù)即時消息中的客戶端B信息及 客戶端C信息轉(zhuǎn)發(fā)即時消息,實現(xiàn)了即時消息的智能路由。并且,客戶端B能夠同時獲取客 戶端C的狀態(tài)信息。當(dāng)客戶端B發(fā)送即時消息“今晚7點開會”給客戶端A,同時獲取客戶端A的狀態(tài) 信息時,如圖10所示,本發(fā)明為客戶端分配應(yīng)用服務(wù)器地址的方法實施例中路由聊天消息 的過程還可包括步驟1001、客戶端B把即時消息“今晚7點開會”發(fā)送到地址為ServerJ應(yīng)用服 務(wù)器,其中該即時消息還包含客戶端B信息,該客戶端B信息可以為客戶端名稱、客戶端標(biāo) 識、客戶端的地址等信息;同時發(fā)送獲取客戶端B的狀態(tài)信息的消息,或者將兩個消息封裝 成一個消息發(fā)送。步驟1002、地址為ServerJ應(yīng)用服務(wù)器根據(jù)客戶端A信息獲取上述客戶端A所登 錄的應(yīng)用服務(wù)器編號,并根據(jù)客戶端B信息獲取上述客戶端B所登錄的應(yīng)用服務(wù)器編號,比 較客戶端B所登錄的應(yīng)用服務(wù)器編號與客戶端A所登錄的應(yīng)用服務(wù)器編號是否相同。例如參見上述步驟702和步驟703,地址為Server_l應(yīng)用服務(wù)器分別對客戶端 A、B進行MD5數(shù)值化,獲取客戶端A、B的編號,并分別對客戶端A、B的編號按服務(wù)器總數(shù)5 取模,分別得到取模值為0,1。客戶端A、B按服務(wù)器總數(shù)取模后,因其取模值之差的絕對值 不為0,因此客戶端A沒有登錄在本應(yīng)用服務(wù)器。步驟1003、由于客戶端B所登錄的應(yīng)用服務(wù)器編號與客戶端A所登錄的應(yīng)用服務(wù) 器編號不相同,地址為server_i應(yīng)用服務(wù)器在存儲的檢查宕機列表和恢復(fù)列表中查找,沒 有獲取客戶端A的記錄,執(zhí)行步驟1004 ;否則,將即時消息和獲取狀態(tài)的消息路由到宕機列 表或恢復(fù)列表中客戶端A對應(yīng)的新應(yīng)用服務(wù)器。步驟1004、地址為ServerJ應(yīng)用服務(wù)器根據(jù)步驟1002獲取的客戶端A信息所登 錄應(yīng)用服務(wù)器編號,從存儲的服務(wù)器列表中獲取該應(yīng)用服務(wù)器編號對應(yīng)的地址,由于該應(yīng) 用服務(wù)器編號為0,該應(yīng)用服務(wù)器地址為server_0,然后轉(zhuǎn)發(fā)即時消息“今晚7點開會”和 獲取狀態(tài)的消息到地址為ServerJ)應(yīng)用服務(wù)器。步驟1005、地址為ServerJ)應(yīng)用服務(wù)器根據(jù)客戶端A登陸的源地址地址轉(zhuǎn)發(fā)即時 消息“今晚7點開會”給客戶端A,并獲取客戶端A的狀態(tài)信息,按原路徑返回給客戶端B。
本實施例中,在地址為ServerJ)應(yīng)用服務(wù)器正常的情況下,地址為Server_l應(yīng)用 服務(wù)器根據(jù)客戶端A信息及客戶端B信息將即時消息轉(zhuǎn)發(fā)到地址為ServerJ)應(yīng)用服務(wù)器, 并且,客戶端B能夠通過地址為ServerJ)應(yīng)用服務(wù)器獲取客戶端A的狀態(tài)信息。 當(dāng)客戶端B發(fā)送即時消息“今晚7點開會”給客戶端D,同時獲取客戶端D的狀態(tài) 信息,且客戶端D原登陸的應(yīng)用服務(wù)器宕機時,如圖11所示,本發(fā)明為客戶端分配應(yīng)用服務(wù) 器地址的方法實施例中路由聊天消息的過程還可包括步驟1101、客戶端B把即時消息“今晚7點開會”發(fā)送到地址為ServerJ應(yīng)用服 務(wù)器,同時發(fā)送獲取客戶端D狀態(tài)信息的消息。步驟1102、地址為ServerJ應(yīng)用服務(wù)器根據(jù)方客戶端D信息獲取上述客戶端D所 登錄的應(yīng)用服務(wù)器編號,并根據(jù)客戶端B信息獲取上述客戶端B所登錄的應(yīng)用服務(wù)器編號, 比較客戶端B所登錄的應(yīng)用服務(wù)器編號與客戶端D所登錄的應(yīng)用服務(wù)器編號是否相同。例如參見上述步驟702和步驟703,地址為Server_l應(yīng)用服務(wù)器根據(jù)方客戶端 D名稱進行MD5數(shù)值化后,按服務(wù)器總數(shù)5取模,得到取模值2,該取模值就是為客戶端D所 登錄的應(yīng)用服務(wù)器編號;同樣地址為Servers應(yīng)用服務(wù)器根據(jù)客戶端B信息進行MD5數(shù)值 化后,按服務(wù)器總數(shù)5取模,得到取模值1,該取模值就是為客戶端B所登錄的應(yīng)用服務(wù)器編 號??蛻舳薆、D按服務(wù)器總數(shù)取模后,因其取模值之差的絕對值不為0,因此客戶端A沒有 登錄在本應(yīng)用服務(wù)器中。步驟1103、由于客戶端B所登錄的應(yīng)用服務(wù)器編號與客戶端D所登錄的應(yīng)用服務(wù) 器編號不相同,地址為server_i應(yīng)用服務(wù)器查找存儲的宕機列表和恢復(fù)列表中,發(fā)現(xiàn)有客 戶端D的記錄。步驟1104、地址為Server_l應(yīng)用服務(wù)器查找宕機列表中客戶端D對應(yīng)的新的應(yīng)用 服務(wù)器,獲知客戶端D登陸在本應(yīng)用服務(wù)器中,從而無需路由即時消息和好友狀態(tài)信息到 其他應(yīng)用服務(wù)器。步驟1105、地址為ServerJ應(yīng)用服務(wù)器根據(jù)客戶端D登陸的源地址轉(zhuǎn)發(fā)即時消息 “今晚7點開會”給客戶端D,并獲取客戶端D的狀態(tài)信息,按原路徑返回給客戶端B。本實施例中,在客戶端D登陸的地址為SerVer_2應(yīng)用服務(wù)器宕機的情況下,客戶 端B登陸的地址為Servers應(yīng)用服務(wù)器根據(jù)宕機列表和恢復(fù)列表直接轉(zhuǎn)發(fā)即時消息到客 戶端D,并獲取客戶端D的狀態(tài)信息給客戶端B,實現(xiàn)了路由即時消息過程中應(yīng)用服務(wù)器的 自動容災(zāi)與負(fù)荷分擔(dān)。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述方法實施例的全部或部分步驟可以通過 程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序 在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者 光盤等各種可以存儲程序代碼的介質(zhì)。最后應(yīng)說明的是以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡 管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然 可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替 換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精 神和范圍。
權(quán)利要求
一種為客戶端分配應(yīng)用服務(wù)器地址的方法,其特征在于,包括接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息;根據(jù)所述客戶端信息,獲取所述客戶端的編號;根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址;向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含被分配的所述客戶端將登錄的應(yīng)用服務(wù)器地址。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述客戶端信息,獲取所述客戶 端的編號,包括根據(jù)所述客戶端信息,利用第五種信息_摘要算法計算獲得客戶端編號。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述客戶端的編號和應(yīng)用服務(wù) 器總數(shù),為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址,包括對所述客戶端編號按所述應(yīng)用服務(wù)器總數(shù)取模,獲得取模值,并確定所述編號為取模 值對應(yīng)的應(yīng)用服務(wù)器為正常工作狀態(tài);為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址,所述應(yīng)用服務(wù)器地址具體為所述編號為 所述取模值對應(yīng)的應(yīng)用服務(wù)器的地址。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括 存儲服務(wù)器列表,所述服務(wù)器列表包括應(yīng)用服務(wù)器地址;所述根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),為所述客戶端分配將登錄的應(yīng)用服務(wù) 器地址,具體為所述根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),在所述服務(wù)器列表中,為 所述客戶端分配將登錄的應(yīng)用服務(wù)器地址。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述服務(wù)器列表還包括各個應(yīng)用服務(wù)器 的能力和工作狀態(tài);為所述客戶端分配的應(yīng)用服務(wù)器發(fā)生宕機,更新所述服務(wù)器列表,將所述應(yīng)用服務(wù)器 的工作狀態(tài)修改為宕機;接收所述客戶端再次發(fā)送的登錄請求消息;根據(jù)所述各個應(yīng)用服務(wù)器的能力,重新為所述客戶端分配將登錄的應(yīng)用服務(wù)器的地址;向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含重新被分配的所述客戶端將 登錄的應(yīng)用服務(wù)器地址。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述根據(jù)所述各個應(yīng)用服務(wù)器的能力,重 新為所述客戶端分配將登錄的應(yīng)用服務(wù)器的地址,包括利用所述服務(wù)器列表中工作狀態(tài)為正常的應(yīng)用服務(wù)器的能力,計算所述各個工作狀態(tài) 為正常的應(yīng)用服務(wù)器的權(quán)重;在所述各個工作狀態(tài)為正常的應(yīng)用服務(wù)器分配權(quán)重區(qū)間,并取隨機數(shù); 重新為所述客戶端分配將登錄的應(yīng)用服務(wù)器的地址,所述客戶端分配將登錄的應(yīng)用服 務(wù)器的地址具體為所述隨機數(shù)所在的權(quán)重區(qū)間對應(yīng)的應(yīng)用服務(wù)器的地址。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,還包括所述宕機的應(yīng)用服務(wù)器恢復(fù)后,更新所述服務(wù)器列表,將所述宕機的應(yīng)用服務(wù)器的工作狀態(tài)恢復(fù)為正常;向其他各個應(yīng)用服務(wù)器發(fā)送恢復(fù)消息,該恢復(fù)消息中包含了所述宕機的應(yīng)用服務(wù)器恢 復(fù)正常的信息;以便于所述各個應(yīng)用服務(wù)器更新宕機列表和恢復(fù)列表。
8.一種為客戶端分配應(yīng)用服務(wù)器地址的方法,其特征在于,包括 接收聊天消息,所述聊天消息中包含接收方的客戶端信息; 根據(jù)所述接收方的客戶端信息,獲取所述接收方的客戶端編號;根據(jù)所述接收方的客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述接收方客戶端所登錄的應(yīng) 用服務(wù)器編號;根據(jù)所述接收方的客戶端所登錄的應(yīng)用服務(wù)器編號,路由所述聊天消息。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述聊天消息中還包含發(fā)送方的客戶端 fn息;所述方法還包括根據(jù)所述發(fā)送方的客戶端信息,獲取所述發(fā)送方的客戶端編號;根 據(jù)所述發(fā)送方的客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述發(fā)送方的客戶端登錄的應(yīng)用服務(wù) 器編號;所述根據(jù)所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號,路由所述聊天消息,包括 確定所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號與發(fā)送方的客戶端登錄的應(yīng)用服務(wù) 器編號相同,路由所述聊天消息至接收方客戶端;或者確定所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號與發(fā)送方的客戶端登錄的應(yīng)用服務(wù) 器編號不相同,當(dāng)存儲的宕機列表或恢復(fù)列表中不存在所述接收方的客戶端編號時,從存 儲的服務(wù)器列表中獲取所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號對應(yīng)的應(yīng)用服務(wù)器地 址,根據(jù)所述應(yīng)用服務(wù)器地址,路由所述聊天消息;當(dāng)所述宕機列表或所述恢復(fù)列表中存在 所述接收方的客戶端編號時,根據(jù)所述宕機列表或所述恢復(fù)列表中的客戶端編號所登錄的 應(yīng)用服務(wù)器地址,路由所述聊天消息。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,還包括接收宕機消息,更新所述宕機列 表;或者接收恢復(fù)消息,更新所述恢復(fù)列表。
11.一種連接服務(wù)器,其特征在于,包括接收單元,用于接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息; 客戶端編號獲取單元,根據(jù)所述客戶端信息,獲取所述客戶端的編號; 分配單元,用于根據(jù)所述客戶端信息為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址; 發(fā)送單元,用于向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含被分配的所 述客戶端將登錄的應(yīng)用服務(wù)器地址。
12.根據(jù)權(quán)利要求11所述的連接服務(wù)器,其特征在于,所述分配單元具體用于對所述 客戶端編號按所述應(yīng)用服務(wù)器總數(shù)取模,獲得取模值,并確定所述取模值為編號的應(yīng)用服 務(wù)器為正常工作狀態(tài);并且為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址,所述應(yīng)用服務(wù)器 地址具體為所述取模值為編號的應(yīng)用服務(wù)器的地址。
13.根據(jù)權(quán)利要求11所述的連接服務(wù)器,其特征在于,還包括存儲單元,用于存儲服務(wù)器列表,所述服務(wù)器列表包括應(yīng)用服務(wù)器地址; 所述分配單元具體用于根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),在所述服務(wù)器列表中的所述客戶端信息,為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址。
14.根據(jù)權(quán)利要求13所述的連接服務(wù)器,其特征在于,所述存儲單元存儲的服務(wù)器列 表還包括各個應(yīng)用服務(wù)器的能力和工作狀態(tài);所述連接服務(wù)器還包括更新單元,用于所述應(yīng)用服務(wù)器發(fā)生宕機或宕機后恢復(fù)時,更 新所述服務(wù)器列表,將所述宕機的應(yīng)用服務(wù)器的工作狀態(tài)對應(yīng)的更新為宕機或正常。
15.根據(jù)權(quán)利要求11所述的連接服務(wù)器,其特征在于,還包括重新分配單元,用于利 用所述服務(wù)器列表中工作狀態(tài)為正常的應(yīng)用服務(wù)器的能力,計算所述各個工作狀態(tài)為正常 的應(yīng)用服務(wù)器的權(quán)重;在所述各個工作狀態(tài)為正常的應(yīng)用服務(wù)器分配權(quán)重區(qū)間,并取隨機 數(shù);重新為所述客戶端分配將登錄的應(yīng)用服務(wù)器的地址,所述客戶端分配將登錄的應(yīng)用服 務(wù)器的地址具體為所述隨機數(shù)所在的權(quán)重區(qū)間對應(yīng)的應(yīng)用服務(wù)器的地址。
16.一種應(yīng)用服務(wù)器,其特征在于,包括接收單元,用于接收聊天消息,所述聊天消息中包含接收方的客戶端信息;客戶端編號獲取單元,用于根據(jù)所述客戶端信息,獲取所述客戶端編號;應(yīng)用服務(wù)器編號獲取單元,用于根據(jù)所述客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取所述客 戶端所登錄的應(yīng)用服務(wù)器編號;路由單元,用于根據(jù)所述客戶端所登錄的應(yīng)用服務(wù)器編號,路由所述聊天消息。
17.根據(jù)權(quán)利要求16所述的應(yīng)用服務(wù)器,其特征在于,所述路由單元,具體用于確定所 述接收方的客戶端登錄的應(yīng)用服務(wù)器編號與發(fā)送方的客戶端登錄的應(yīng)用服務(wù)器編號相同, 路由所述聊天消息至接收方客戶端;或者確定所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號與發(fā)送方的客戶端登錄的應(yīng)用 服務(wù)器編號不相同,當(dāng)存儲的宕機列表或恢復(fù)列表中不存在所述接收方的客戶端編號時, 從存儲的服務(wù)器列表中獲取所述接收方的客戶端登錄的應(yīng)用服務(wù)器編號對應(yīng)的應(yīng)用服務(wù) 器地址,根據(jù)所述應(yīng)用服務(wù)器地址,路由所述聊天消息;當(dāng)所述宕機列表或所述恢復(fù)列表中 存在所述接收方的客戶端編號時,根據(jù)所述宕機列表或所述恢復(fù)列表中的客戶端編號所登 錄的應(yīng)用服務(wù)器地址,路由所述聊天消息。
18.根據(jù)權(quán)利要求16所述的應(yīng)用服務(wù)器,其特征在于,還包括更新單元,用于根據(jù)宕機消息更新宕機列表,或者根據(jù)恢復(fù)消息更新恢復(fù)列表。
19.一種通信系統(tǒng),其特征在于,包括連接服務(wù)器,用于接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息;根據(jù) 所述客戶端信息,獲取所述客戶端的編號;根據(jù)所述客戶端信息為所述客戶端分配將登錄 的應(yīng)用服務(wù)器地址;向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含被分配的所 述客戶端將登錄的應(yīng)用服務(wù)器地址;至少兩個應(yīng)用服務(wù)器,用于接收聊天消息,所述聊天消息中包含接收方的客戶端信息; 根據(jù)所述客戶端信息,獲取所述客戶端編號;根據(jù)所述客戶端編號和應(yīng)用服務(wù)器總數(shù),獲取 所述客戶端所登錄的應(yīng)用服務(wù)器編號;根據(jù)所述客戶端所登錄的應(yīng)用服務(wù)器編號,路由所 述聊天消息。
全文摘要
本發(fā)明涉及一種為客戶端分配應(yīng)用服務(wù)器地址的方法、服務(wù)器及系統(tǒng),方法包括接收客戶端登錄請求消息,所述登錄請求消息包含客戶端信息;根據(jù)所述客戶端信息,獲取所述客戶端的編號;根據(jù)所述客戶端的編號和應(yīng)用服務(wù)器總數(shù),為所述客戶端分配將登錄的應(yīng)用服務(wù)器地址;向所述客戶端發(fā)送登錄響應(yīng)消息,所述登錄響應(yīng)消息包含被分配的所述客戶端將登錄的應(yīng)用服務(wù)器地址。通過根據(jù)客戶端信息為客戶端分配將登錄的應(yīng)用服務(wù)器地址,實現(xiàn)了根據(jù)客戶端信息為客戶端分配應(yīng)用服務(wù)器。
文檔編號H04L12/24GK101860493SQ20091008191
公開日2010年10月13日 申請日期2009年4月8日 優(yōu)先權(quán)日2009年4月8日
發(fā)明者張燕斌, 李貴華, 梁秀品, 沈慶春, 肖雅文 申請人:華為軟件技術(shù)有限公司