網站建設/編號 1246538

網站伺服器使用方便

2021-04-01
$500
98835291 98835291

1.特點

遊戲伺服器:

交互頻繁

單次交互數據量小

實時要求超高,不能接受1s以上的延遲

玩家要能看到其他玩家的狀態

有聊天,幫會,組團,互相傷害等及時消息

排行榜及時變化

有獨立的客戶端可以保存玩家數據

網站伺服器:

交互不頻繁

單次交互數據量大,經常有文件上傳下載、圖片上傳下載,大段文章,很多圖片列表

能接受1s以上的延遲

大部分數據要求請求時間點的狀態即可,不需要時時推送

瀏覽器作為客戶端,安卓和ios客戶端也是在仿照瀏覽器的功能

2.TCP連接 vs HTTP連接 實現原理

(1)TCP連接

建立一個TCP連接需要經過「三次握手「

第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。

握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連 接之前,TCP 連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」

(2)HTTP連接

HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。

HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。

1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。

2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。

由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種「短連接」,要保持客戶端程序的在線狀態,需要不斷地向伺服器發起連接請求。通常的 做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次「保持連接」的請求,伺服器在收到該請求後對客戶端進行回復,表明知道客 戶端「在線」。若伺服器長時間無法收到客戶端的請求,則認為客戶端「下線」,若客戶端長時間無法收到伺服器的回覆,則認為網絡已經斷開。

摘自 HTTP與TCP的區別和聯繫 - CSDN博客,有更詳細的講解。

  1. 基於tcp和http 原理 Connection使用

(1)TCP CONNECTION

TCP連結在創建好後,保持Connection,直到客戶端或者伺服器主動斷開。而一般通過心跳包來確認連接的有效性。如果特定時間內沒有收到心跳包,則一方主動斷開連接

在連接保持的時間內,客戶端或者伺服器都可以使用Connection實例為對方發送信息,進行持續的交互。

交互的信息一般通過協議傳輸,用協議號來標識協議的唯一性。

客戶端和伺服器要提前用協議號與監聽事件綁定好。當客戶端或者伺服器收到特定的協議後,觸發響應的事件,進入到對應的類的接口中。

不管是客戶端發送伺服器的協議還是伺服器發給客戶端的協議,都可以不返回,單方面處理完即可結束。如果要返回還要通過對應的Connection實例,來主動推送消息給對方。

對於伺服器,要管理已經創建好的所有TCP連結,一般通過玩家的唯一id與Connection一對一即可找到彼此。每個伺服器只對應唯一連接,當然也可能一個客戶端同時連接多個功能伺服器。

(2)HTTP CONNECTION

由於HTTP的「短連接」特點,每次傳輸信息,都要創建新的連接。

每次請求又要攜帶大量的信息,而每次請求還要攜帶回所需要的信息。因此在客戶端發送給伺服器請求後,會同步等待伺服器返回,伺服器處理完成後,返回給客戶端,客戶端才接著處理下面的事情(當然也存在異步的HTTP請求)。

由於HTTP連結不能保持,所以伺服器不用維護HTTP客戶端連結,也就能找到客戶端,不能為客戶端推送數據,像聊天室這種強交互的業務,如果由HTTP來實現就本末倒置了。

3.遊戲伺服器業務需要

對於遊戲伺服器,各種各樣的玩法(武器屬性,戰鬥屬性,升星,強化,幫會...),數據修改頻繁,而每一次數據的修改都要與伺服器進行交互,這每一次數據交互所傳輸的數據量一般比較小。玩家自己的一件武器升級,一個寶寶升星,一個寶石鑲嵌...只要把對應的道具和要做的操作告訴伺服器即可,當操作完成,伺服器再把修改好的數據同步到客戶端。

遊戲客戶端一般分為pc端,pc微端,Android端,ios端,網頁端。網頁端又分為js網頁端、unity網頁端、flash網頁端... 現在市面上流行的稍大型或者稍複雜的遊戲客戶端js和flash已經很少了,至少也要是一個遊戲客戶端會存儲大量的(一個玩家全部的個人數據)玩家數據。在玩家只是單純的切換頁面查看自己的道具或其他遊戲元素時,客戶端和伺服器是不會進行交互的,只需要把客戶端本地的數據展示出來即可。、

當玩家之間進行交互時,比如一個玩家對另一個玩家造成傷害,一個玩家搶了另一個玩家的物品,這時要讓被傷害或者被搶的玩家知道。這就需要伺服器通知這個玩家,你被玩家揍了,要報仇啊;你被玩家搶了,要記得搶回來...如果該玩家被打或者被搶的玩家沒有在線,還要做離線處理,或者在設計功能時,特意的避開離線玩家。

4.網站伺服器業務需要

對於網站平台伺服器,一般用來展示一個文章列表, 一篇文章,一個圖片列表,一張高清圖片,一個視頻列表,一個視頻。一個用戶進入到某個頁面會看到大段的文章或者大量圖片,會留在該頁面一定的時長,這種交互節奏相對遊戲業務就少了很多。

對於瀏覽器來說,是對緩存和本地存儲都有很多限制,因此在瀏覽器本地是不會存儲很多數據的。由於客戶端的延遲,用戶的請求節奏慢,伺服器又無法給客戶端推送伺服器最新的數據等客觀因素,客戶端的數據很可能已經與伺服器的數據有了很大出入,每次頁面的切換、刷新都要從伺服器請求大量的數據,同步最新的伺服器數據。

根據遊戲伺服器和網站平台伺服器的業務需要,對選擇TCP還是HTTP會有一定的偏向。但是在實際生產中,還要結合更具體的功能和產品設計來選擇更好的技術。畢竟還是有些遊戲伺服器用了HTTP協議實現,而有的平台也用了WebSocket。

需要伺服器請聯繫我,聯繫方式TG:@PDD2025 微信QQ同號 1048884847

本作者共發布了4個廣告

評論
0 條評論
還沒有評論 有疑問可以先留言,後來的用戶也能看到。