欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

不看后悔!揭秘游戲服務器開發(fā)

 更新時間:2021年06月30日 15:12:45   作者:香菜聊游戲  
剛開始時以為做游戲服務器和做web差不多,但是經(jīng)過一段時間之后,才發(fā)現(xiàn)代碼太多,太亂了,這里我把一些游戲開發(fā)方面的東西整理一下,希望能對那些想做游戲服務器開發(fā)的朋友有所幫助

前言

《摩爾莊園》前段時間上線, 持續(xù)超出市場預期,相信也有不錯的收益。游戲好玩,所有玩家看到了前端,但是做一款游戲,離不開后臺游戲服務器的支持,服務器都要做什么,服務器的架構是什么,需要哪些技術,一系列的問題有沒有思考過?下面講下作為做服務器開發(fā)中需要做的事。

1、常見游戲模塊

游戲玩法

游戲開發(fā)中常見的玩法模塊,一般的游戲都會包含這些玩法

新手引導、任務系統(tǒng)、背包系統(tǒng)、裝備系統(tǒng)、副本、戰(zhàn)斗系統(tǒng)、活動、商店、充值,競技場,公會系統(tǒng),好友系統(tǒng)、聊天系統(tǒng)、郵件系統(tǒng)、紅點系統(tǒng)等等

通用模塊

  1. 定時job,處理一些定期活動重置,排名發(fā)獎勵等
  2. 登錄,頂號,離線,斷線重連處理
  3. 敏感詞檢測,版署需要
  4. 日志系統(tǒng),記錄玩家行為日志,獎勵日志等
  5. 功能開啟關閉,有時候游戲出問題后(比如刷獎勵)指定功能需要及時關閉
  6. 掉落,獎勵隨機規(guī)則
  7. 防沉迷系統(tǒng),主要是未成年人保護規(guī)則
  8. 聊天監(jiān)控,
  9. 錯誤上報機制
  10. 道具卡兌換,邀請碼
  11. 夏令時問題處理
  12. 不停服熱更線上代碼
  13. 緊急下家運營活動
  14. 合服

運營后臺管理系統(tǒng)

  1. 發(fā)布下架活動
  2. 發(fā)布公告
  3. 發(fā)送郵件
  4. 游戲資源凍結
  5. 賬號封號,解封,禁言
  6. 查詢當前在線人數(shù)

2、開發(fā)語言與項目構建發(fā)布

一般游戲服務器使用C++,nodejs,photon, JAVA等語言開發(fā),端游戲一般選擇C++,因為端游對服務器的性能要求相對比較高一些,語言各有利弊,C++效率高,但是掌握度難些,JAVA易于掌握,開發(fā)效率搞,目前對于追求快速上線率的頁游和手游來說,JAVA成了一個不錯的選擇,下面主要以JAVA項目來講述服務器各模塊之間如何交互,如何分工合作。項目采用maven框架構建,簡化了項目依賴管理, jar包便于與持續(xù)集成工具(jenkins)整合一鍵打包發(fā)布svn,一般地,游戲服務器的架構劃分如下三層:網(wǎng)絡接入層、游戲邏輯層、數(shù)據(jù)存儲層

網(wǎng)絡接入層

通信方面使用Netty框架,主要封裝各種物理底層通訊機制,讓應用程序員關注業(yè)務邏輯。協(xié)議數(shù)據(jù)使用protobuff, Protobuf有更高的消息壓縮率,時間效率和空間效率都有很大的提升,支持多語言,跨平臺

數(shù)據(jù)緩存以及存儲

市面用的游戲用到的數(shù)據(jù)庫大多是下面這幾種:

MySQL,MongoDB, Redis

游戲服務器都配備了數(shù)據(jù)庫,是因為游戲越來越復雜,數(shù)據(jù)量也越來越多,而且采用數(shù)據(jù)庫也方便對數(shù)據(jù)的管理和備份。mysql主要存儲一些游戲中玩家數(shù)據(jù),redis主要存儲一些跨服數(shù)據(jù),比如跨服排行榜數(shù)據(jù)實時排名,或者數(shù)據(jù)的緩存。

游戲中玩家數(shù)據(jù)需要及時響應,及時反饋,一般游戲中絕大部分的數(shù)據(jù)是有緩存的,游戲中玩家產(chǎn)生的數(shù)據(jù)變化,一般先修改玩家緩存數(shù)據(jù),一定時間后,緩存數(shù)據(jù)定時批量寫入數(shù)據(jù)庫,長期使用不到的緩存將會被清理,減少內存空間使用。

游戲邏輯層

服務器各類模塊介紹 :

模塊名 功能類型 功能說明
yyds-all maven父功能 管理模塊關系,maven的一些配置
yyds-core 公共模塊 游戲業(yè)務無關的公共代碼。
yyds-common 基礎模塊 游戲業(yè)務相關的公共代碼。
yyds-game 游戲服 處理游戲業(yè)務邏輯(游戲和聊天業(yè)務,聊天消息通過網(wǎng)關進行轉發(fā))
yyds-gate 網(wǎng)關服 負責維護客戶端連接,轉發(fā)消息。
yyds-scene 場景服 處理地圖相關業(yè)務(移動、視野同步)
yyds-web WEB服 登錄、創(chuàng)角、充值、GM命令、運營后臺操作入口。
yyds-platform 跨服 游戲服之間的消息中轉,跨服類玩法。
yyds-fighter 戰(zhàn)斗服 處理戰(zhàn)斗邏輯

服務器架構 :

注:platform 和多個游戲服相連接。

流程說明:

登陸流程:玩家登陸時首先連接web服,進行登陸,驗證成功后,會將玩家登陸的token 放到Gate服。然后玩家連接Gate服登陸到Game服。

戰(zhàn)斗流程:玩家在Game服發(fā)起戰(zhàn)斗,比如匹配戰(zhàn)斗,則在Game服上匹配,然后送入Fighter 戰(zhàn)斗服進行戰(zhàn)斗,此時所有的戰(zhàn)斗消息從Gate服直接路由到Fighter服,戰(zhàn)斗結果發(fā)送給Game服,然后進行發(fā)獎等邏輯

玩家移動流程:玩家移動消息同步給Scene服,Scene服每一幀同步給所有的玩家

3、JAVA游戲服務器,需要掌握的技術

  1. Java基礎知識
  2. JavaNIO編程
  3. 多線程編程,并發(fā)集合的掌握,游戲中有很多并發(fā)事件,安全性尤為重要
  4. 熱更新,內存,CPU性能分析
  5. Netty,Mina網(wǎng)絡框架精通一種
  6. Redis,memcache,MongoDB等單用或者組合使用
  7. SQL語言,數(shù)據(jù)庫:如mysql
  8. 數(shù)據(jù)庫操作,比如mybatis,Hibernate
  9. spring,springMvc主要用于http協(xié)議的WEB服務器
  10. tomcat,Nginx
  11. Linux常用的基本命令及shell腳本(服務器發(fā)布,啟動關閉)

4、總結

游戲服務器因為需要面向所有的玩家,所以對服務器的穩(wěn)定性要求比較高,不能總是出現(xiàn)問題,需要在開發(fā)中細心。

策劃的設計經(jīng)常天馬行空,所以也要考慮到服務器的功能擴展性,爭取在盡量少寫代碼的情況下完成功能。

服務端程序的開發(fā)速度很重要,需要考慮模塊的通用性,功能的擴展性,盡量的降低bug可能性,合理設計。

服務端同學任重道遠,需要不斷的學習和積累經(jīng)驗,才能做好游戲的支撐。

加油吧,希望各位同學做出自己喜歡的游戲,這篇文章就到這里了,希望能幫到你,請多多關注腳本之家的更多內容!

相關文章

  • Java如何獲取Cookie和Session

    Java如何獲取Cookie和Session

    Cookie?和?Session之間主要是通過?SessionId?關聯(lián)起來的,?SessionId是?Cookie?和?Session?之間的橋梁,這篇文章主要介紹了Java獲取Cookie和Session的方法,需要的朋友可以參考下
    2024-01-01
  • Springboot項目快速實現(xiàn)過濾器功能

    Springboot項目快速實現(xiàn)過濾器功能

    上篇文章已經(jīng)給大家介紹了Springboot項目如何快速實現(xiàn)Aop功能,這篇文章給大家介紹Springboot項目如何快速實現(xiàn)過濾器功能,感興趣的小伙伴可以參考閱讀
    2023-03-03
  • 如何解決java.util.zip.ZipFile解壓后被java占用問題

    如何解決java.util.zip.ZipFile解壓后被java占用問題

    這篇文章主要介紹了如何解決java.util.zip.ZipFile解壓后被java占用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Sprint Boot 集成MongoDB的操作方法

    Sprint Boot 集成MongoDB的操作方法

    最近接手一個Springboot項目,需要在原項目上增加一些需求,用到了mongodb。下面通過本文給大家分享Sprint Boot 集成MongoDB的操作方法,需要的朋友參考下吧
    2017-12-12
  • Feign調用中的兩種Header傳參方式小結

    Feign調用中的兩種Header傳參方式小結

    這篇文章主要介紹了Feign調用中的兩種Header傳參方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Spring @Conditional注解原理解析

    Spring @Conditional注解原理解析

    這篇文章主要介紹了Spring @Conditional注解原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • restemplate請求亂碼之content-encoding=“gzip“示例詳解

    restemplate請求亂碼之content-encoding=“gzip“示例詳解

    RestTemplate從Spring3.0開始支持的一個HTTP請求工具,它提供了常見的REST請求方案的模板,及一些通用的請求執(zhí)行方法 exchange 以及 execute,接下來通過本文給大家介紹restemplate請求亂碼之content-encoding=“gzip“,需要的朋友可以參考下
    2024-03-03
  • spring 整合 mybatis 中數(shù)據(jù)源的幾種配置方式(總結篇)

    spring 整合 mybatis 中數(shù)據(jù)源的幾種配置方式(總結篇)

    因為spring 整合mybatis的過程中, 有好幾種整合方式,尤其是數(shù)據(jù)源那塊,經(jīng)??吹讲灰粯拥呐渲梅绞?,總感覺有點亂,所以今天有空總結下,感興趣的朋友跟隨腳本之家小編一起學習吧
    2018-05-05
  • Mybatis中的mapper模糊查詢語句LIKE

    Mybatis中的mapper模糊查詢語句LIKE

    這篇文章主要介紹了Mybatis中的mapper模糊查詢語句LIKE,具有很好的參考價值,希望對大家有所幫助。
    2021-12-12
  • java map中相同的key保存多個value值方式

    java map中相同的key保存多個value值方式

    這篇文章主要介紹了java map中相同的key保存多個value值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論