首页 攻略教程 手游攻略 如何搭建一款棋牌游戏

如何搭建一款棋牌游戏

时间:2022-04-30 17:00:05 来源:网络 浏览:

一,棋牌類服務器的特點

1,棋牌類遊戲一般不分區不分服,所以棋牌類服務器要滿足隨著用戶量的增加而擴展的需要。

2,房間模式:即在同一局遊戲中就是在同一個房間中,同一個房間中的人可以接收到其他人的消息。

3,往往每個房間的操作必須是順序性,這個特性類似與一般遊戲的回合制,每個玩傢的操作都是有順序性的。


二,關於搭建的技術點

1,數據共享

因為棋牌類遊戲不分區不分服,故在設計服務器的時候,是按世界服的思想去設計,即服務器是一個n多臺物理機的集群。當用戶登陸服務器,創建房間時,可能根據負載均衡算法,它可以在任何一臺服務器上面。所以,不管用戶登陸到哪一臺服務器上面瞭,都可以獲得自己的數據。我們可以考慮可以使用redis來做數據共享。

2,如何進入房間

在同一局遊戲中,我們要求所有人都在同一個房間中,我們可以規定在同一個房間中的用戶,必須登陸到同一臺物理服務器上面。在創建房間完成之後,其他人根據房間號查找房間的時候,可以根據房間號,獲取這個房間所在的服務器ip和端口,判斷一個當前用戶登陸的服務器ip與房間所在的服務器ip是否相同,如果相同,就不做切換,如果不一樣,客戶端就使用ip和端口,連接到房間所在的服務器上面。

3,保證房間操作的順序性

創建房間成功之後,接下來的操作都要保證它的順序性,所以房間需要有一個它自己的消息個隊列。我們可以把每個房間到達服務器的消息封裝為一個任務,把這個任務放到消息隊列中,然後有一個任務執行者去按順序執行這些任務。


三,系統架構

1,功能設計

a,登陸

一般都是需要接第三方登陸,登陸這一塊是http操作,我們統一提供一個web服務,用來做登陸驗證。因為在登陸時,調用第三方的http服務,這個過程可能很慢,如果放在邏輯服務器的話,可能會卡業務邏輯任務。因為可能不同的玩傢業務請求可能同在一個線程中,如果有任務卡瞭,那麼這個任務以後新來的請求請會卡住,導致消息延遲。

b,獲取遊戲公告,也放在web服務中。公告一般是遊戲登陸的時候向服務器獲取一次。把它放在web服務器中,與業務邏輯分離的好處是,當業務邏輯服務器維護或更新的時候,不影響用戶的登陸,和獲取公告,這樣用戶體驗會好一些。

c,創建用戶唯一的id,因為棋牌類遊戲服務器是世界服,無分區,所以用戶的id必須是全局唯一的。可以利用redis的incr方法,原子的遞增,如果不想被別人根據userid的遞增推算出有多少註冊用戶,遞增的梯度可以隨機,比如每次遞增的值從1到1024中隨機一個。

d,創建房間,當房間主創建房間時,房間的id需要在任何臺服務器上可以查詢到,所以創建房間成功後,房間id要存儲在共享內存redis中,每個房間id對應一個房間所在的ip地址或服務器id.這樣,當有用戶要進入房間,在查詢房間id時,可能判斷這個房間是否和自己登陸的遊戲服務器相同。

e,查找加入房間

根據房間id查詢房間,查找到房間後,獲取房間所在的ip地址或服務器id,如果發現和自己所登陸的服務器一樣,直接可以加入房間。如果不一樣,把這個房間所在的ip和端口返回給客戶端,讓客戶端重新與房間所在的服務器建立連接,使用登陸時的token驗證用戶。

f,遊戲腳本調用

在驗證遊戲是否合法時,客戶端與服務器都要驗證,驗證的算法是一樣的,所以可以使用腳本來寫,寫一份腳本,在服務器與客戶端中同時使用。可以使用lua。同一個算法使用同一個腳本 ,這樣在開發新的同類型棋牌遊戲時,隻需要替換一下這個腳本就行瞭,不用再重復開發。

3,後臺管理系統

這個一般是根據運營需求開發的,每個公司不一樣。不過有一點,後臺管理系統可能要和遊戲服務器通信,這種通信方式最好是采用redis的訂閱/發佈機制。這樣可以把某個消息事件同時發送到所有的業務服務器上面。根據用戶所在的服務器進行處理。

4,玩傢同屏

玩傢同屏是棋牌遊戲中的一個重點,對於做過那些大型的arpg,或mmo遊戲的程序員來說,這並不是什麼難事。因為同屏就是服務器對客戶端的消息進行轉發。一個房間四個人,一個人出的牌或操作能被其他三個人同時看到。

因為棋牌遊戲的同步數據量比較小。一般常見的同步方式有兩種:

1,客戶端主動拉取。

客戶端定時主動向服務器請求一個用戶的消息隊列,當一個玩傢有操作需要同步到其他玩傢時,在服務器端先把這個消息放到這個用戶的消息隊列中。等待客戶端的拉取操作。這種方式的好處是,不需要考慮網絡閃斷或網絡不好的情況,信息都是同步獲取的。缺點是,定時拉取的時間間隔很短,可能不到一秒就會拉取一次。

2,服務器主動推送

當一個用戶出牌的消息需要同步給其他玩傢時,服務器會獲得這個玩傢與服務器建立的socket連接,然後服務器使用socket主動向客戶端發送消息。

這種方式要考慮網絡閃斷,消息丟失的問題。因為服務器推送的消息,客戶端有可能會收不到。所以客戶端需要根據心跳來判斷網絡是否有斷開過,如果有斷開,需要重新從服務器拉取整個房間狀態的消息。或者根據服務器發送的消息號,如果客戶端發現接收到的服務器消息號有跳號的,比如應該接收10,卻收到瞭12,說明中間有消息丟失,需要重新拉取整個房間的狀態信息。

這種方式的缺點是,開發復雜,需要考慮一些網絡問題。優點是,隻有在有消息的時候才會推送,沒有的話不推送,不占用帶寬等系統資源,可以增加用戶同時在線量,也就是增加瞭服務器的承載量。

5,數據同步和持久化

1,由於棋牌類的遊戲數據少,計算量也小,所以完全可以不使用內存緩存,而直接使用redis共享內存,用戶的所有數據都緩存在redis中。更新也同步更新到redis中,這樣不管一個用戶登陸哪一臺業務服務器,都能獲得自己的最新數據。

2,更新數據庫,由於數據第一緩存是redis,所以活躍的用戶數據都是可以從redis中直接獲得的,而不用查詢數據庫,所以數據庫的更新可以采取異步更新,而不會產會數據的延遲。需要註意的一點是,數據的異步更新必須保證是有順序的。那麼這就會產生一個問題,怎麼保證用戶的更新不會亂呢?

3,如何保證更新的順序性

因為我們的業務服務器是多個的,用戶可能連接其中的任何一個,如果說登陸的是服務器A,加入的房間在服務器B上,那麼連接就會切換。為瞭保證數據更新的順序,我們可以做一個數據庫持久化服務,把需要更新數據庫的任務實時發送到這臺服務器上,由數據庫持久化服務執行對數據庫的更新。這樣不管用戶連接的哪臺業務服務器,它的更新都是有順序保證的。

4,一種快速簡單的方法

由於棋牌類的業務少,數據更新少,所以查詢可以有redis緩存,減少數據庫查詢的壓力,而更新實行實時更新到數據庫,前期不需要開發數據庫持久化服務。等用戶積累到一定程序之後,發現更新數據庫比較慢的時候,再單獨做一個數據庫持久化服務。


四,服務器架構

8.jpg1,登陸時,客戶端首先向登陸的web服務器請求登陸信息,登陸成功之後,返回登陸的token,為瞭適應大規模的web請求和登陸服務的穩定,可以使用nginx做負載均衡。

2,登陸成功之後,請求負載均衡服務器,獲取一臺連接的業務服務器。這個負載均衡服務器可以和登陸web在一個進程中,也可以獨立出來。

3,拿到登陸成功的token和需要連接的業務服務器的ip和端口之後,再去連接業務服務器。連接成功之後,要使用token到登陸服務器去驗證,這個用戶是否登陸瞭。

4,同一個房間的用戶要連接到同一臺物理服務器上面。在上面已經說過瞭。

5,redis用來做共享緩存。

6,mysql做持久化存儲。

7,數據庫持久化服務器,統一做數據入庫操作。

五,關於網關的問題

1,網關的作用

a,轉發消息包

b,業務的負載均衡,比如A業務由服務器a處理,B業務由服務器b處理,由網關進行轉發。

c,維護與客戶端的連接

d,帶寬的整合,一般的雲服務都是按購買的高防服務器計算帶寬的。通過一臺高防服務器轉發消息,可以隻購買一個大帶寬就可以瞭

如果您還在為遊戲被攻擊而煩惱

經常被ddos攻擊、cc攻擊

支付通道被攻擊

金融項目被攻擊

區塊鏈被攻擊

棋牌遊戲被攻擊

等等問題,隨時可以聯系小蟻桑,一小時內解決問題,減少不必要的損失

有需要的夥伴可以下方留言或者私信小蟻桑哦。

标题:如何搭建一款棋牌游戏
链接:https://www.baolilai-hotel.com/news/18539.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
一个已更新4000多关的游戏,每次都有玩家说要被它的文案笑死

玩这种游戏确实是相当解压。文/小林最近一段时间,葡萄君发现一个有意思的现象,身边玩《开心消消乐》的人,似乎又多了起来。14、15年的时候,在地铁上总是能听到此起彼伏的“Unbelievable!”“Amazing!”的游戏声音,后来随着《王者荣耀》《梦幻西游》这样的重度产品割据市场,身边玩消消乐的人像是藏起来了一般。但大概从今年6月份开始,自打我的朋友圈被一些好笑到不行的更新文案给刷屏之后,曾经那些玩《开心消消乐》的人好像又回来了。微博#开心消消乐文案是德云社写的吗#相关话题下的用户评论清一色“哈哈哈哈哈

2022-04-30
开心消消乐的运营策划程序员怎么都这么可爱 每次更新都有被笑到

家人们 恋爱真的是会让人快乐的(啪啪打脸)不信,你看开心消消乐的策划小哥谈恋爱前:关卡怎么编,怎么提高活跃人数谈恋爱后:哈哈哈哈哈哈哈哈哈下班了▼隔着屏幕感觉到了开心▼玩个游戏也要被迫吃狗粮▼知道了知道了 退下吧▼哈哈哈哈哈这是认真的吗▼可爱的打工人▼游戏的魅力在这▼终于知道为什么除了我以外我身边全世界都在玩消消乐了▼他应该去写小说也不错哈哈哈▼好憨憨▼你成功的引起了我的注意,开 心 消 消 乐▼消消乐的程序员超搞笑的!-end-图片素材来源网络如有侵权,请联系删除文章首发自公众号:哈婆娘i

2022-04-30
拟分红约23亿元,完美世界公布2021年报次日股价涨停

4月25日晚,完美世界(SZ:002624)发布了2021年业绩报告。同日,公司股价从每股11.94元,上涨10.04%到今日(4月26日)的每股13.15元,目前已经涨停收盘。报告显示,期内公司营收为人民币85.18亿元,同比下降16.69%;归母净利润为3.69亿元,同比下降76.16%。其中游戏业务营收为74.21亿元,同比下降19.77%;归母净利润为7.2亿元,同比下降68.48%。由于完美世界2021年报的大部分内容,已在2021年业绩快报中披露,本文仅对财报中的关键信息进行简单梳理:期内新品

2022-04-30
完美世界:重瞳女是什么境界,为何要救石毅?

完美世界中最新的一集终于看到重瞳女出手独闯魔灵湖,众多尊者在她面前根本毫无一战之力,至于魔灵湖的结界也如同虚设,可见重瞳女的实力已经远超尊者,而结合后面重瞳女争夺第一灵根的时候所展示出来的实力也并不是十分出色,那她在闯魔灵湖的时候实力应该在斩我境界,也就是说就还达不到上界教主的实力(因为小塔评价过这个重瞳女说相对于上界教主这个她还太年轻,而上界教主最强的一般是遁一境界)。这里补充下完美世界中的境界等级:搬血->洞天->化灵->铭纹->列阵->尊者->神火->真一->圣祭->天神->虚道->斩我->遁一->

2022-04-30
“吃鸡”梦之光华大转盘!全套9000碎片,最稳妥的抽奖只有一个

务实、不浮夸!我是你们的好朋友,微笑十倍镜。吃鸡手游和平精英的新款大转盘军需已经上架了,这套名为梦之光华的联名军需,虽然质量并不高,但还是吸引了一大批玩家氪金,吸金能力可见一斑!众所周知,大转盘是最拼运气的军需!从1星开始免费是否免费叠加成功,完全靠运气!如今喜欢尝鲜的氪金玩家已经率先将整套军需拿下,全套9000碎片的氪度让人望而却步!那么新军需怎么抽最稳妥呢?接下来让我们一起了解一下吧!首先,需要说明的是大转盘最明智的入手方法并不是自己抽奖,而是从好友那里直购!以下的方法只适合认为从别人手中入手非常麻烦

2022-04-30
神庙逃亡上帝视角揭秘!无限循环没终点,入口左转即出口

神庙逃亡作为一款2012年上线的手游,可以说至今依然有着很多忠实的粉丝。可能对于大多数人来说,那可能也是曾经的游戏了。但是对于一小部分人来说,神庙逃亡带给他们的就是一个永远无法成功的挑战。因为时至今日几乎也没有人能成功从神庙中逃出来。逃出神庙似乎就成为了一些喜欢挑战极限的玩家最终的梦想了。但是,只能说这绝对是一个不可能完成的挑战了。因为在最近,也就是时隔六年之后,终于有玩家发现了神庙的秘密。只不过这个秘密别发现之后,也直接证实了想要逃出神庙绝对是不可能的。因为游戏在制作的时候就已经被做成了一个无限循环的模

2022-04-30