行業資訊

  • 首頁
  • 新聞中心
  • 行業資訊

關于棋牌游戲服務器架構設計,宇眾網絡高防服務器租用,27.148.147.1雙線福州棋牌手游專用服務器!!!


2018年07月20日

一,棋牌類服務器的特點

  1,棋牌類不分區不分服

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

  2,房間模式

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

  3,每個房間的操作必須是順序性

  這個特性類似與一般游戲的回合制,每個玩家的操作都是有順序性的。

  二,需要解決的技術點

  1,數據共享

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

  2,如何進入房間

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

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

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

★如有服務器租用可咨詢宇眾臨風,QQ:2850293179    Tel:15999932452    訂購網址:www.jindaxi.cn

  三,系統架構

  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。同一個算法使用同一個腳本 ,這樣在開發新的同類型棋牌游戲時,只需要替換一下這個腳本就行了,不用再重復開發。

  2,后臺管理系統

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

  3,玩家同屏

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

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

客戶端主動拉取
  • 1
  • 2

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

服務器主動推送
  • 1
  • 2

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

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

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

  4,數據同步和持久化

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

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

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

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

  4,一種快速簡單的方法

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

  四,服務器架構 
這里寫圖片描述 
棋牌游戲服務器架構設計

  1,登陸時,客戶端首先向登陸的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,帶寬的整合,一般的云服務都是按購買的服務器計算帶寬的。通過一臺服務器轉發消息,可以只購買一個大帶寬就可以了。以節約成本。

  2,棋牌類游戲需要網關嗎?

  我認為不太需要,因為棋牌類游戲業務比較單一,做的最多的就是消息同屏轉發。最多是再有一些任務或活動,這些由一臺服務器直接處理完全可以搞定。而且開發網關也是一個復雜的工作,沒必要在這個上面花太多的時間。


客服
主站蜘蛛池模板: 婷婷色中文字幕综合在线| 亚洲综合婷婷久久| 亚洲AV综合色区无码一区爱AV| 久久久久亚洲AV综合波多野结衣| 日日AV色欲香天天综合网| 国产色婷婷精品综合在线| 国产综合在线观看| 日韩亚洲欧美久久久www综合网| 无翼乌无遮挡全彩老师挤奶爱爱帝国综合社区精品| 欧美婷婷六月丁香综合色| 婷婷国产天堂久久综合五月| 国产综合色在线视频区| 综合欧美亚洲日本| 久久婷婷五月综合色奶水99啪| 女人和拘做受全程看视频日本综合a一区二区视频| 色狠狠色狠狠综合一区| 五月婷婷综合免费| 综合色就爱涩涩涩综合婷婷| 综合色就爱涩涩涩综合婷婷| 久久综合中文字幕| 色综合综合色综合色综合| 欧美综合自拍亚洲综合网| 国产激情综合在线观看| 国产色综合天天综合网| 亚洲第一综合色| 天天做天天爱天天爽天天综合| 久久99国产综合精品女同| 狠狠色丁香婷婷久久综合| 亚洲伊人久久成综合人影院| 国产成人精品综合久久久久| 欧美国产日韩另类综合一区| 色噜噜狠狠色综合网| 欧美日韩综合一区在线观看| 亚洲欧美综合网| 色噜噜狠狠狠综合曰曰曰| 亚洲性感综合欧美| 亚洲欧洲日韩国产综合在线二区| 少妇人妻综合久久中文字幕| 国产欧美综合一区二区三区| 亚洲色欲色欲综合网站| 一本久久a久久精品vr综合|