網路遊戲中伺服器端與客戶端分別處理哪些事情

2022-05-20 02:42:33 字數 1086 閱讀 3263

根據情況不同,客戶端做的事情都有不同。

伺服器至少要做驗證。

相對於網路遊戲來說,資料傳輸量在一定程度上可以忽略,而更注重資料來回時間。在一般情況下,比如說wow裡面,200ms延遲就開始變黃。也就是說在一般對時間要求不是很極端的,比如kof97轉到mmo,200可以預設為乙個普通mmo的標準線。

用具體事例來說,舉個例子:聊天。乙個遊戲如此設定,乙個玩家當使用「當前頻道」時,只能讓周圍50公尺的玩家收到。

於是。玩家a輸入了一堆話,這個時候客戶端接收,並立即傳送到伺服器端。

伺服器端固定週期處理一次所有聊天資訊,比如200毫秒,客戶端送到的時候,正好上乙個200毫秒過去了,於是排在下乙個200毫秒的佇列裡。這個時候任何客戶端是沒辦法看到聊天資訊的,包括a端(假定是這麼設定的,這個就是有的時候你網路卡的時候,明明按了回車,對話方塊卻不冒出任何聊天資訊的原因)。

時間在流逝,伺服器開始跑佇列,並跑到這個地方了,於是它開始運算,第一是判斷這句聊天對話是當前頻道、世界頻道還是其他,判定結果是當前,於是執行當前頻道的處理:讀取這個玩家所在位置,搜尋這個位置方圓50公尺的其他玩家,向這些玩家包括a端廣播聊天資訊(假如還有黑名單功能,還要剔除黑名單玩家;假如付費使用者字型還有特殊顏色,還要傳播這個對話的風格)。

而基本上這整個過程,包括玩家位置資訊,包括玩家聊天內容,大小不可能超過1kb,就算是加密後。也就是這種資料量在正常情況下是可以忽略的。這個也是一般網路遊戲的傳輸資料量標準。更重要的是兩個引數,第一玩家資訊包傳送到伺服器並由伺服器返回的時間;第二伺服器處理事件的週期。

而除了ui位置這些瑣碎無關於角色的資訊,其他資訊都應該儲存在伺服器端。儲存在客戶端的應該是資源,包括角色模型、動畫、場景、特效等,部分遊戲也將大量文字儲存在客戶端,比如任務對話。而重要資訊,特別是任何將對自己或其他玩家有影響有改動的資訊都應該放在伺服器端。比如角色的經驗、甚至比如你接到的任務(如果你儲存在客戶端,你換台機,以前接到的任務就都沒了)。

至於客戶端向伺服器端什麼時候傳送訊息,多少頻率,那一般是個長連線,只要資訊量沒超過kb,影響都不太大。實際上,只要你登入以後,伺服器端和客戶端就一直在相互通訊。哪怕你不動,伺服器都會因為你有可能接受到聊天資訊而不停的給你塞訊息。所以這個還是讓程式去頭疼,他們是專業。

事情大體上就是這樣。

客戶端與伺服器端通訊

關係圖 傳送 邏輯管理器 處理邏輯傳送指令 指令解析管理器 根據協議xml解析指令成二進位制資料 把二進位制資料傳給伺服器 接收 伺服器傳送二進位制資料到客戶端 指令解析管理器 根據協議xml解析二進位制資料 根據解析資料對映到邏輯類來處理 2 1 3 20 2,2 21 1,1,2 指令名和指令名...

客戶端跳轉與伺服器端跳轉

客戶端跳轉時用httpservletresopse物件的sendredirect函式實現,伺服器端跳轉是使用requestdispather物件的forward方法實現的。這兩者之間的區別主要體現在三個方面 1.使用伺服器端跳轉時,客戶瀏覽器的位址列並不會顯示目標位址的url,而是用客戶端跳轉時,位...

客戶端跳轉與伺服器端跳轉

客戶端跳轉時用httpservletresopse物件的sendredirect函式實現,伺服器端跳轉是使用requestdispather物件的forward方法實現的。這兩者之間的區別主要體現在三個方面 1.使用伺服器端跳轉時,客戶瀏覽器的位址列並不會顯示目標位址的url,而是用客戶端跳轉時,位...