服務器房間:棋牌游戲服務器架構設計
【版權聲明】文章部分內(nèi)容來源于網(wǎng)絡,僅供參考!若有服務器租用/托管相關問題,請咨詢YINGSOO在線客服!良心推薦、按需選配,更簡單、更高效、更劃算!
【暢銷產(chǎn)品】香港云服務器價格 | 德國物理服務器價格 | 香港云服務器價格 | 法國云服務器價格
【導購指南】日本云服務器該如何選擇?這幾點要注意 | 什么是DDoS攻擊?如何防御DDoS攻擊?
棋牌游戲服務器架構設計
一,棋牌類服務器的特點1,棋牌類不分區(qū)不分服
一般來說,棋牌游戲都是不分區(qū)不分服的。所以棋牌類服務器要滿足隨著用戶量的增加而擴展的需要。
2,房間模式
即在同一局游戲中就是在同一個房間中,同一個房間中的人可以接收到其他人的消息。
3,每個房間的操作必須是順[主機]序性
這個特性類似與一般游戲的回合制,每個玩家的操作都是有順序性的。
二,需要解決的技術點
1,數(shù)據(jù)共享
因為棋牌類游戲不分區(qū)不分服,我們在設計服務器的時候,是按世界服的思想去設計,即服務器是一個n多臺物理機的集群。當用戶登陸服務器,創(chuàng)建房間時,可能根據(jù)負載均衡算法,它可以在任何一臺服務器上面。所以,[香港服務器]不管用戶登陸到哪一臺服務器上面了,都可以獲得自己的數(shù)據(jù)。我們可以使用redis來做數(shù)據(jù)共享。
2,如何進入房間
在同一局游戲中,我們要求所有人都在同一個房間中,我們可以規(guī)定在同一個房間中的用戶,必須登陸到同一臺物理服務器上面。在創(chuàng)建房間完成之后,其他人根據(jù)房間號查找房間的時候,可以根據(jù)房間號,獲取這個房間所在的服務器ip和端口,判斷一個當前用戶登陸的服務器ip與房間所在的服務器ip是否相同,如果相同,就不做切換,如果不一樣,客戶端就使用ip和端口,連接到房間所在的服務器上面。
3,保證房間操作的順序性
創(chuàng)建房間成功之后,接下來的操作都要保證它的順序性,所以房間需要有一個它自己的消息個隊列。我們可以把每個房間到達服務器的消息封裝為一個任務,把這個任務放到消息隊列中,然后有一個任務執(zhí)行者去按順序執(zhí)行這些任務。
三,棋牌游戲服務器系統(tǒng)架構
1,功能設計
a,登陸
一般都是需要接第三方登陸,登陸這一塊是http操作,我們統(tǒng)一提供一個web服務,用來做登陸驗證。因為在登陸時,調(diào)用第三方的http服務,這個過程可能很慢,如果放在邏輯服務器的話,可能會卡業(yè)務邏輯任務。因為可能不同的玩家業(yè)務請求可能同在一個線程中,如果有任務卡了,那么這個任務以后新來的請求請會卡住,導致消息延遲。
b,獲取游戲公告,也放在web服務中。公告一般是游戲登陸的時候向服務器獲取一次。把它放在web服務器中,與業(yè)務邏輯分離的好處是,當業(yè)務邏輯服務器維護或更新的時候,不影響用戶的登陸,和獲取公告,這樣用戶體驗會好一些。
c,創(chuàng)建用戶唯一的id,因為棋牌類游戲服務器是世界服,無分區(qū),所以用戶的id必須是全局唯一的??梢岳胷edis的incr方法,原子的遞增,如果不想被別人根據(jù)userid的遞增推算出有多少注冊用戶,遞增的梯度可以隨機,比如每次遞增的值從1到1024中隨機一個。
d,創(chuàng)建房間,當房間主創(chuàng)建房間時,房間的id需要在任何臺服務器上可以查詢到,所以創(chuàng)建房間成功后,房間id要存儲在共享內(nèi)存redis中,每個房間id對應一個房間所在的ip地址或服務器id.這樣,當有用戶要進入房間,在查詢房間id時,可能判斷這個房間是否和自己登陸的游戲服務器相同。
e,查找加入房間
根據(jù)房間id查詢房間,查找到房間后,獲取房間所在的ip地址或服務器id,如果發(fā)現(xiàn)和自己所登陸的服務器一樣,直接可以加入房間。如果不一樣,把這個房間所在的ip和端口返回給客戶端,讓客戶端重新與房間所在的服務器建立連接,使用登陸時的token驗證用戶。
f,游戲腳本調(diào)用
在驗證游戲是否合法時,客戶端與服務器都要驗證,驗證的算法是一樣的,所以可以使用腳本來寫,寫一份腳本,在服務器與客戶端中同時使用??梢允褂胠ua。同一個算法使用同一個腳本 ,這樣在開發(fā)新的同類型棋牌游戲時,只需要替換一下這個腳本就行了,不用再重復開發(fā)。
3,后臺管理系統(tǒng)
這個一般是根據(jù)運營需求開發(fā)的,每個公司不一樣。不過有一點,后臺管理系統(tǒng)可能要和游戲服務器通信,這種通信方式最好是采用redis的訂閱/發(fā)布機制。這樣可以把某個消息事件同時發(fā)送到所有的業(yè)務服務器上面。根據(jù)用戶所在的服務器進行處理。
4,玩家同屏
玩家同屏是棋牌游戲中的一個重點,對于做過那些大型的arpg,或mmo游戲的程序員來說,這并不是什么難事。因為同屏就是服務器對客戶端的消息進行轉(zhuǎn)發(fā)。一個房間四個人,一個人出的牌或操作能被其他三個人同時看到。
因為棋牌游戲的同步數(shù)據(jù)量比較小。一般常見的同步方式有兩種:
a,客戶端主動拉取。
客戶端定時主動向服務器請求一個用戶的消息隊列,當一個玩家有操作需要同步到其他玩家時,在服務器端先把這個消息放到這個用戶的消息隊列中。等待客戶端的拉取操作。這種方式的好處是,不需要考慮網(wǎng)絡閃斷或網(wǎng)絡不好的情況,信息都是同步獲取的。缺點是,定時拉取的時間間隔很短,可能不到一秒就會拉取一次。
b,服務器主動推送
當一個用戶出牌的消息需要同步給其他玩家時,服務器會獲得這個玩家與服務器建立的socket連接,然后服務器使用socket 主動向客戶端發(fā)送消息。
這種方式要考慮網(wǎng)絡閃斷,消息丟失的問題。因為服務器推送的消息,客戶端有可能會收不到。所以客戶端需要根據(jù)心跳來判斷網(wǎng)絡是否有斷開過,如果有斷開,需要重新從服務器拉取整個房間狀態(tài)的消息。或者根據(jù)服務器發(fā)送的消息號,如果客戶端發(fā)現(xiàn)接收到的服務器消息號有跳號的,比如應該接收10,卻收到了12,說明中間有消息丟失,需要重新拉取整個房間的狀態(tài)信息。
這種方式的缺點是,開發(fā)復雜,需要考慮一些網(wǎng)絡問題。優(yōu)點是,只有在有消息的時候才會推送,沒有的話不推送,不占用帶寬等系統(tǒng)資源,可以增加用戶同時在線量,也就是增加了服務器的承載量。
5,數(shù)據(jù)同步和持久化
a,由于棋牌類的游戲數(shù)據(jù)少,計算量也小,所以完全可以不使用內(nèi)存緩存,而直接使用redis共享內(nèi)存,用戶的所有數(shù)據(jù)都緩存在redis中。更新也同步更新到redis中,這樣不管一個用戶登陸哪一臺業(yè)務服務器,都能獲得自己的最新數(shù)據(jù)。
b,更新數(shù)據(jù)庫,由于數(shù)據(jù)第一緩存是redis,所以活躍的用戶數(shù)據(jù)都是可以從redis中直接獲得的,而不用查詢數(shù)據(jù)庫,所以數(shù)據(jù)庫的更新可以采取異步更新,而不會產(chǎn)會數(shù)據(jù)的延遲。需要注意的一點是,數(shù)據(jù)的異步更新必須保證是有順序的。那么這就會產(chǎn)生一個問題,怎么保證用戶的更新不會亂呢?
c,如何保證更新的順序性
因為我們的業(yè)務服務器是多個的,用戶可能連接其中的任何一個,如果說登陸的是服務器A,加入的房間在服務器b上,那么連接就會切換。為了保證數(shù)據(jù)更新的順序,我們可以做一個數(shù)據(jù)庫持久化服務,把需要更新數(shù)據(jù)庫的任務實時發(fā)送到這臺服務器上,由數(shù)據(jù)庫持久化服務執(zhí)行對數(shù)據(jù)庫的更新。這樣不管用戶連接的哪臺業(yè)務服務器,它的更新都是有順序保證的。
d,一種快速簡單的方法
由于棋牌類的業(yè)務少,數(shù)據(jù)更新少,所以查詢可以有redis緩存,減少數(shù)據(jù)庫查詢的壓力,而更新實行實時更新到數(shù)據(jù)庫,前期不需要開發(fā)數(shù)據(jù)庫持久化服務。等用戶積累到一定程序之后,發(fā)現(xiàn)更新數(shù)據(jù)庫比較慢的時候,再單獨做一個數(shù)據(jù)庫持久化服務。
四,棋牌游戲服務器架構
1,登陸時,客戶端首先向登陸的web服務器請求登陸信息,登陸成功之后,返回登陸的token,為了適應大規(guī)模的web請求和登陸服務的穩(wěn)定,可以使用nginx做負載均衡。
2,登陸成功之后,請求負載均衡服務器,獲取一臺連接的業(yè)務服務器。這個負載均衡服務器可以和登陸web在一個進程中,也可以獨立出來。
3,拿到登陸成功的token和需要連接的業(yè)務服務器的ip和端口之后,再去連接業(yè)務服務器。連接成功之后,要使用token到登陸服務器去驗證,這個用戶是否登陸了。
4,同一個房間的用戶要連接到同一臺物理服務器上面。在上面已經(jīng)說過了。
5,redis用來做共享緩存。
6,mysql做持久化存儲。
7,數(shù)據(jù)庫持久化服務器,統(tǒng)一做數(shù)據(jù)入庫操作。
五,關于網(wǎng)關的問題
1,網(wǎng)關的作用
a,轉(zhuǎn)發(fā)消息包
b,業(yè)務的負載均衡,比如A業(yè)務由服務器a處理,b業(yè)務由服務器b處理,由網(wǎng)關進行轉(zhuǎn)發(fā)。
c,維護與客戶端的連接
d,帶寬的整合,一般的云服務都是按購買的服務器計算帶寬的。通過一臺服務器轉(zhuǎn)發(fā)消息,可以只購買一個大帶寬就可以了。以節(jié)約成本。
2,棋牌類游戲需要網(wǎng)關嗎?
我認為不太需要,因為棋牌類游戲業(yè)務比較單一,做的最多的就是消息同屏轉(zhuǎn)發(fā)。最多是再有一些任務或活動,這些由一臺服務器直接處理完全可以搞定。而且開發(fā)網(wǎng)關也是一個復雜的工作,沒必要在這個上面花太多的時間。
怎樣將域名_云服務器的網(wǎng)站綁定
最近有客戶問小編,”我在買了云服務器,但是不會綁定域名怎么辦?“;還有客戶說:”我的域名是之前在**上購買的,已經(jīng)備案過了,最近買了服務器ECS,并且選擇了的網(wǎng)站建設服務,那么怎樣將域名與云服務器的網(wǎng)站綁定?“相信這是不少新手站長的共同困惑,今天小編就來統(tǒng)一回復下。
登錄購買域名的網(wǎng)站[服務器韓國]后臺,點擊”域名管理“,一般做的都是DNS解析,通常,域名的DNS都是默認的服務商的DNS。然后添加服務商提供給我們空間的IP地址,一般是在一個IP段的范圍。做域名解析時域名輸入注意www與不帶www的區(qū)分,一般帶www和不帶www的域名都是需要解析,因為通過兩種方式都可以訪問網(wǎng)站。然后輸入解析到的主機IP,點擊開始解析即可完成域名解析。這樣域名與云服務器的網(wǎng)站就已經(jīng)綁定了。
ps:在做域名與云服務器的網(wǎng)站[新加坡物理服務器]綁定操作時,需要注意的是:你的域名必須實名認證,你的網(wǎng)站必須備案。
YINGSOO電話:4006-303-752
熱門文章:【入局聯(lián)通混改】【日本服務器問題】【服務器內(nèi)存】【區(qū)塊鏈技術】【傳奇服務器在哪里租】【網(wǎng)站服務器托管】【網(wǎng)站暫停】【云視頻服務器架設】【北京idc機房bgp帶寬】【宿遷服務器】【刀塔傳奇app服務器】【美國vps試用7天】【服務器托管與租用哪個更好】【高防免備案服務器有什么優(yōu)勢】【服務器集群】【維護香港服務器的方法】【深圳電信機房租用】【云主機免費使用】【抗投訴外貿(mào)服務器機房如何保障網(wǎng)站安全】【攻擊游戲】【海外服務器性能】【游戲網(wǎng)站】【企業(yè)云服務器】【云主機哪家好國內(nèi)】【3300G高防服務器】【高防御服務器】【區(qū)塊鏈服務器】【手機網(wǎng)絡代理軟件】【服務器產(chǎn)品】【香港機房托管】
9年獨享韓國云服務器業(yè)務運營經(jīng)驗,1200家企業(yè)客戶共同選擇.韓國Korea Telecom機房核心合作伙伴,機房帶寬資源充足,到國內(nèi)速度平均在80ms左右.
http://www.sddonglingsh.com/products/cloud-kr.html
海外 云服務器 推薦,YINGSOO,專業(yè)海外云服務器提供商,提供亞洲,歐美等全球范圍云服務器租用托管,1對1客服指導,7x24小時保障,全球精選線路免費試用
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。