- 百萬(wàn)在線(xiàn):大型游戲服務(wù)端開(kāi)發(fā)
- 羅培羽
- 701字
- 2021-09-17 17:04:52
1.3 能夠承載多少玩家
服務(wù)端程序要承載很多玩家,性能是必須要考慮的問(wèn)題。那么,1.2.4節(jié)的程序能夠承載多少玩家同時(shí)在線(xiàn)呢?
1.3.1 單線(xiàn)事件模型
圖1-11展示了1.2節(jié)程序的執(zhí)行過(guò)程,無(wú)論何時(shí)服務(wù)端都是按順序執(zhí)行代碼的。圖中在時(shí)刻①,客戶(hù)端A發(fā)送消息,服務(wù)端接收并處理。在①和②之間,服務(wù)端沒(méi)有消息接收,進(jìn)入等待狀態(tài)。在時(shí)刻③客戶(hù)端A和B同時(shí)發(fā)送消息,服務(wù)端收到后,先后執(zhí)行。
有個(gè)專(zhuān)業(yè)術(shù)語(yǔ)叫“Reactor模型”,指的就是圖1-11所示的程序執(zhí)行方式,這里做個(gè)狹義的翻譯——單線(xiàn)事件模型。“單線(xiàn)”指的是單線(xiàn)程,“事件”指的是事件觸發(fā),即當(dāng)新連接、斷開(kāi)連接、收到數(shù)據(jù)這些事件到來(lái)時(shí)會(huì)觸發(fā)某段代碼。

圖1-11 單線(xiàn)模型的時(shí)序圖
1.3.2 承載量估算
要計(jì)算服務(wù)端系統(tǒng)的承載量,則要從CPU負(fù)載、內(nèi)存占用、網(wǎng)絡(luò)流量等多個(gè)角度考量,很難做到準(zhǔn)確的估算,因?yàn)榉?wù)端運(yùn)行在不同配置的物理機(jī)上,不同游戲類(lèi)型的邏輯復(fù)雜度也不相同。但可以做個(gè)假設(shè),假設(shè)在MMORPG中,玩家平均每3秒操作一次(走路、購(gòu)物),服務(wù)端平均處理一條消息花費(fèi)2毫秒。
從CPU的角度來(lái)看,同一時(shí)刻服務(wù)端只能處理一個(gè)客戶(hù)端請(qǐng)求,按上述假設(shè),服務(wù)端每秒可以處理500條消息,即最高可以承載1500人。
按經(jīng)驗(yàn)推算,最高1000多人在線(xiàn)的游戲,日活躍用戶(hù)(即每天登錄的人數(shù))大概是三五千。這種承載量對(duì)于多數(shù)獨(dú)立游戲、小型手游是足夠的。
知識(shí)拓展:盡管理論上CPU可以承載1000多人,但在實(shí)際情況中會(huì)低很多,而且這里只計(jì)算了CPU的負(fù)載,事實(shí)上,內(nèi)存、網(wǎng)絡(luò)流量也會(huì)對(duì)其有影響。“走路”程序受網(wǎng)絡(luò)影響很大,因?yàn)橥婕覍?duì)服務(wù)端的響應(yīng)速度有要求,總不能走一步等3秒鐘后才有回應(yīng)吧。如果不做進(jìn)一步優(yōu)化,廣播的消息量與在線(xiàn)玩家則呈指數(shù)增長(zhǎng)關(guān)系,通常這類(lèi)單線(xiàn)程程序只能支持幾十名玩家。
- 計(jì)算機(jī)網(wǎng)絡(luò)
- Raspberry Pi for Python Programmers Cookbook(Second Edition)
- Instant Testing with CasperJS
- Python程序設(shè)計(jì)
- Python機(jī)器學(xué)習(xí)編程與實(shí)戰(zhàn)
- Learning Probabilistic Graphical Models in R
- Unity 2D Game Development Cookbook
- 微服務(wù)架構(gòu)深度解析:原理、實(shí)踐與進(jìn)階
- Image Processing with ImageJ
- Vue.js 3應(yīng)用開(kāi)發(fā)與核心源碼解析
- 貫通Tomcat開(kāi)發(fā)
- Puppet:Mastering Infrastructure Automation
- Python 快速入門(mén)(第3版)
- Instant GLEW
- jQuery Mobile Web Development Essentials(Second Edition)