當前位置: 妍妍網 > 碼農

淚目!網路連線中斷的原因,終於找到了!

2024-05-22碼農

朋友們,出大事了!

不知道多少朋友玩過 DNF 這個遊戲,這個我從小學玩到大學的 「破」 遊戲,昨天竟然出手遊了!

我都忘了自己曾幾何時預約過這個手遊通知,昨天給我發了條通知資訊說遊戲已開服。

老玩家直接淚目了啊:時空之門,開!

好心動啊,然而我心中有一個聲音告訴自己:不能下!不能下!不能下!

因為根據我自己小時候淩晨偷摸爬起來玩遊戲沖級的沈迷經歷,一旦我玩了,公司基本就沒救了,本來就忙的一批,怎能讓一個小 「破」 遊戲,影響了我的大事!

玩笑話

言歸正傳,無論大家有沒有玩過這個,我相信大家都有過玩遊戲或工作時 「網路連線中斷」 的經歷吧。

我小時候還真就遇到過剛剛爆了好裝備,就網路連線中斷的情況,當時都給我氣哭了,心裏把策劃的祖宗十八代都問候了一遍。

但做了程式設計師之後,我現在已經能夠理解為什麽會出現網路連線中斷、伺服器擠不進去、遊戲延遲的情況了。

這篇文章就從技術的角度出發,給大家科普一些網路方面的概念,也許能幫你打遊戲更快哦~

網路小知識

一、網路連線中斷的常見原因

1、網路延遲大或不穩定

延遲:指封包從發送端到接收端所需的時間。這個概念在遊戲中,尤其是 FPS 第一人稱射擊遊戲和 RTS 實施策略遊戲中尤為重要。因為延遲會導致操作反饋的滯後,玩家可能會感覺到遊戲操作不流暢,甚至出現瞬間卡頓。

抖動:指封包傳輸時間的變化。當抖動過大時,會導致封包到達時間不一致,從而影響遊戲體驗。典型的現象就是,玩家可能會看到遊戲角色突然移動到另一個位置,實作 「瞬移」。

丟包:在數據傳輸過程中,某些封包遺失,未能成功到達目的地。丟包會導致遊戲中的資訊不完整、出現卡頓、畫面跳動等問題。丟包率較高時,遊戲基本就沒法玩了,持續丟包就有可能導致伺服器斷開連線。

小時候我家裏網路差,最心酸的事情是因為網路延遲跳過自己的行動回合、或者因為抖動和丟包導致怪物滿屏亂飄,當時戲稱這些是 「遊戲特性」。

2、頻寬不足

即使不是程式設計師,我相信大家對頻寬這個概念也並不陌生。頻寬是指單位時間內可以傳輸的數據量,它很大程度上決定了網速的快慢。

頻寬分為上行頻寬和下行頻寬。上行頻寬指的是從客戶端(如家庭網路)向伺服器發送數據的速度,理解為上傳;下行頻寬則是從伺服器向客戶端傳輸數據的速度,理解為下載。

當多個裝置同時使用網路時,如果頻寬不足,尤其是上行頻寬不足,就會導致網路擁堵,影響遊戲數據的傳輸速度。

需要註意的是,即使你家的網路速度很快,遊戲體驗也不一定會很好。因為網路通訊是客戶端和伺服端雙向的。如果遊戲公司的伺服器本身效能較差、頻寬較小,即使你的頻寬很高,網路傳輸的效能也不會很好,進而影響遊戲體驗。

3、伺服端問題

前面也提到了,除了自己的網路外,伺服端也是影響網路連線和速度的決定性因素。比如遊戲開服或秒殺活動上線時,瞬時間會有大量的流量湧入伺服器,如果伺服器沒有做好流量預估、擴容和相應的處理措施,很可能出現網路擁塞、伺服器過載等問題,導致玩家的網路連線不穩定。

為了避免網路擁塞和伺服器過載,通常每個伺服器都會設定一個允許連線的最大使用者數。所以才會出現下圖的名場面:

此外,一般遊戲更新維護的時間都在淩晨或者玩家存取量不大的時候;而且為了保證遊戲數據不出問題、更好地進行測試,很多遊戲會選擇停機維護。

哦對了,如果遊戲伺服器不幸被 DDoS 攻擊,也有可能會造成網路連線中斷。

4、其他原因

除了上面幾點我們最明顯能感受到的網路問題外,還有一些我們可能感受不到的影響網路的因素,比如路由器配置和硬體問題、鄰近 Wi-Fi 網路幹擾等。

二、網路最佳化小建議

分享了一些網路知識後,再聊一聊可行的網路最佳化小建議吧,我相信很多同學都實踐過。

1)盡量使用有線連線,會比無線連線更穩定,減少幹擾。

2)選擇一個覆蓋面廣的路由器,可以定期檢查和更新固件,提升裝置效能和穩定性。

3)除了升級自家頻寬外,平時可以多關註網路頻寬的使用占比。因為現在很多套用都會在後台默默傳輸一些數據,積少成多。追求極致效能的話,可以用一些網路監控工具來分析頻寬占用,在打遊戲時關閉掉一些軟體。

有位大佬開源了一款免費的網路監控工具 TrafficMonitor,分享給大家:https://github.com/zhongyang219/TrafficMonitor

4)選擇合適的遊戲伺服器。這點其實很重要,建議選擇離自己地理位置較近的伺服器。我小時候不懂,家在江蘇,非要去選個什麽廣東的遊戲大區。

5)使用專線網路或遊戲加速器。原理就是讓工具來幫我們選擇更合適的伺服器節點、並且最佳化數據的傳輸路徑。但是這玩意我小時候打遊戲的時候就不愛用,免費的沒啥效果,收費的又搞不起。

6)調整路由器的 QoS 設定。QoS(服務品質)是在網路上為不同應用程式分配頻寬的技術,可以優先分配遊戲所需的頻寬,盡量保證遊戲封包的通訊品質。

最後

除了上面這些知識點外,其實我自己腦洞挺大的,還想了很多關於 「網路連線中斷」 的猜想。比如寫下這樣一段程式碼,吸引使用者充值:

if (使用者 A 爆了裝備 1) {
if (裝備 1 是稀有裝備) {
if (使用者沒充值) {
// 強行中斷網路連線
connect.close()
}
}
}

或者這樣一段程式碼,讓會員使用者體驗拉滿!

if (伺服器人數已滿) {
if (使用者 A 是普通使用者) {
彈窗提示("伺服器人數已滿")
elseif (使用者 A 是會員) {
// 允許進入伺服器
connect.start()
// 讓一個普通使用者網路連線中斷
userBconnect.close()
}
}

僅供娛樂,如果你是一家遊戲公司的開發和策劃,請別這麽幹謝謝!


👇🏻 點選下方閱讀原文,獲取魚皮往期編程幹貨。

後端求職突擊訓練營過了今天就會大漲價了,想提前為秋招做準備的朋友一定不要錯過:

往期推薦