123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868 |
- <!DOCTYPE HTML>
- <html lang="" >
- <head>
- <meta charset="UTF-8">
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
- <title>1 游戏服务器开发的基本体系与服务器端开发的一些建议 · 高性能服务器开发 技术专栏</title>
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta name="description" content="">
- <meta name="generator" content="GitBook 3.2.3">
- <meta name="author" content="easy_coder">
-
-
-
- <link rel="stylesheet" href="../../gitbook/style.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-chapter-fold/chapter-fold.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-search-pro/search.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-splitter/splitter.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-back-to-top-button/plugin.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-prism/prism.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-tbfed-pagefooter/footer.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-code/plugin.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-fontsettings/website.css">
-
-
-
- <link rel="stylesheet" href="../../gitbook/gitbook-plugin-theme-fexa/fexa.css">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <meta name="HandheldFriendly" content="true"/>
- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black">
- <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../gitbook/images/apple-touch-icon-precomposed-152.png">
- <link rel="shortcut icon" href="../../gitbook/images/favicon.ico" type="image/x-icon">
-
- <link rel="next" href="2网络游戏服务器开发框架设计介绍.html" />
-
-
- <link rel="prev" href="./" />
-
- </head>
- <body>
-
- <div class="book">
- <div class="header-inner">
- <!-- LOGO -->
- <div class="logo"></div>
- <span class="title"></span>
- <!-- Search -->
-
- <div id="book-search-input" role="search">
- <input type="text" placeholder="Type to search" />
- </div>
- <!-- Nav -->
- <ul class="header-nav">
-
- </ul>
- </div>
- <div class="book-summary">
- <div class="book-summary-title">文档目录</div>
-
-
- <nav role="navigation">
-
- <ul class="summary">
-
-
-
-
-
- <li class="header">Part I</li>
-
-
-
- <li class="chapter " data-level="1.1" data-path="../../">
-
- <a href="../../">
-
-
- Introduction
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2" data-path="../C++必知必会的知识点/">
-
- <a href="../C++必知必会的知识点/">
-
-
- C++必知必会的知识点
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="1.2.1" data-path="../C++必知必会的知识点/如何成为一名合格的CC++开发者?.html">
-
- <a href="../C++必知必会的知识点/如何成为一名合格的CC++开发者?.html">
-
-
- 如何成为一名合格的C/C++开发者?
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.2" data-path="../C++必知必会的知识点/不定参数函数实现var_arg系列的宏.html">
-
- <a href="../C++必知必会的知识点/不定参数函数实现var_arg系列的宏.html">
-
-
- 不定参数函数实现var_arg系列的宏
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.3" data-path="../C++必知必会的知识点/你一定要搞明白的C函数调用方式与栈原理.html">
-
- <a href="../C++必知必会的知识点/你一定要搞明白的C函数调用方式与栈原理.html">
-
-
- 你一定要搞明白的C函数调用方式与栈原理
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.4" data-path="../C++必知必会的知识点/深入理解CC++中的指针.html">
-
- <a href="../C++必知必会的知识点/深入理解CC++中的指针.html">
-
-
- 深入理解C/C++中的指针
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.5" data-path="../C++必知必会的知识点/详解C++11中的智能指针.html">
-
- <a href="../C++必知必会的知识点/详解C++11中的智能指针.html">
-
-
- 详解C++11中的智能指针
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.6" data-path="../C++必知必会的知识点/C++17结构化绑定.html">
-
- <a href="../C++必知必会的知识点/C++17结构化绑定.html">
-
-
- C++17结构化绑定
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.7" data-path="../C++必知必会的知识点/C++必须掌握的pimpl惯用法.html">
-
- <a href="../C++必知必会的知识点/C++必须掌握的pimpl惯用法.html">
-
-
- C++必须掌握的pimpl惯用法
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.8" data-path="../C++必知必会的知识点/用VisualStudio调试Linux程序.html">
-
- <a href="../C++必知必会的知识点/用VisualStudio调试Linux程序.html">
-
-
- 用Visual Studio调试Linux程序
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.9" data-path="../C++必知必会的知识点/如何使用VisualStudio管理和阅读开源项目代码.html">
-
- <a href="../C++必知必会的知识点/如何使用VisualStudio管理和阅读开源项目代码.html">
-
-
- 如何使用Visual Studio管理和阅读开源项目代码
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.2.10" data-path="../C++必知必会的知识点/利用cmake工具生成VisualStudio工程文件.html">
-
- <a href="../C++必知必会的知识点/利用cmake工具生成VisualStudio工程文件.html">
-
-
- 利用cmake工具生成Visual Studio工程文件
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="1.3" data-path="../多线程/">
-
- <a href="../多线程/">
-
-
- 多线程
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="1.3.1" data-path="../多线程/后台C++开发你一定要知道的条件变量.html">
-
- <a href="../多线程/后台C++开发你一定要知道的条件变量.html">
-
-
- 后台C++开发你一定要知道的条件变量
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="1.3.2" data-path="../多线程/整型变量赋值是原子操作吗?.html">
-
- <a href="../多线程/整型变量赋值是原子操作吗?.html">
-
-
- 整型变量赋值是原子操作吗?
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="divider"></li>
-
-
-
- <li class="chapter " data-level="2.1" data-path="../网络编程/">
-
- <a href="../网络编程/">
-
-
- 网络编程
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="2.1.1" data-path="../网络编程/bind函数重难点解析.html">
-
- <a href="../网络编程/bind函数重难点解析.html">
-
-
- bind 函数重难点解析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.2" data-path="../网络编程/connect函数在阻塞和非阻塞模式下的行为.html">
-
- <a href="../网络编程/connect函数在阻塞和非阻塞模式下的行为.html">
-
-
- connect 函数在阻塞和非阻塞模式下的行为
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.3" data-path="../网络编程/select函数重难点解析.html">
-
- <a href="../网络编程/select函数重难点解析.html">
-
-
- select 函数重难点解析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.4" data-path="../网络编程/Linuxepoll模型(含LT模式和ET模式详解).html">
-
- <a href="../网络编程/Linuxepoll模型(含LT模式和ET模式详解).html">
-
-
- Linux epoll 模型(含LT 模式和 ET 模式详解)
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.5" data-path="../网络编程/socket的阻塞模式和非阻塞模式.html">
-
- <a href="../网络编程/socket的阻塞模式和非阻塞模式.html">
-
-
- socket 的阻塞模式和非阻塞模式
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.6" data-path="../网络编程/非阻塞模式下send和recv函数的返回值.html">
-
- <a href="../网络编程/非阻塞模式下send和recv函数的返回值.html">
-
-
- 非阻塞模式下 send 和 recv 函数的返回值
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.7" data-path="../网络编程/服务器开发通信协议设计介绍.html">
-
- <a href="../网络编程/服务器开发通信协议设计介绍.html">
-
-
- 服务器开发通信协议设计介绍
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.8" data-path="../网络编程/TCP协议如何解决粘包、半包问题.html">
-
- <a href="../网络编程/TCP协议如何解决粘包、半包问题.html">
-
-
- TCP 协议如何解决粘包、半包问题
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.9" data-path="../网络编程/网络通信中收发数据的正确姿势.html">
-
- <a href="../网络编程/网络通信中收发数据的正确姿势.html">
-
-
- 网络通信中收发数据的正确姿势
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="2.1.10" data-path="../网络编程/服务器端发数据时,如果对端一直不收,怎么办?.html">
-
- <a href="../网络编程/服务器端发数据时,如果对端一直不收,怎么办?.html">
-
-
- 服务器端发数据时,如果对端一直不收,怎么办?
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="divider"></li>
-
-
-
- <li class="chapter " data-level="3.1" data-path="../程序员必知必会的网络命令/">
-
- <a href="../程序员必知必会的网络命令/">
-
-
- 程序员必知必会的网络命令
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="3.1.1" data-path="../程序员必知必会的网络命令/利用telnet命令发电子邮件.html">
-
- <a href="../程序员必知必会的网络命令/利用telnet命令发电子邮件.html">
-
-
- 利用telnet命令发电子邮件
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="3.1.2" data-path="../程序员必知必会的网络命令/做Java或者C++开发都应该知道的lsof命令.html">
-
- <a href="../程序员必知必会的网络命令/做Java或者C++开发都应该知道的lsof命令.html">
-
-
- 做Java或者C++开发都应该知道的lsof命令
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="3.1.3" data-path="../程序员必知必会的网络命令/Linux网络故障排查的瑞士军刀.html">
-
- <a href="../程序员必知必会的网络命令/Linux网络故障排查的瑞士军刀.html">
-
-
- Linux网络故障排查的瑞士军刀nc命令
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="3.1.4" data-path="../程序员必知必会的网络命令/Linuxtcpdump使用介绍.html">
-
- <a href="../程序员必知必会的网络命令/Linuxtcpdump使用介绍.html">
-
-
- Linux tcpdump使用详解
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="3.1.5" data-path="../程序员必知必会的网络命令/从抓包的角度分析connect函数的连接过程.html">
-
- <a href="../程序员必知必会的网络命令/从抓包的角度分析connect函数的连接过程.html">
-
-
- 从抓包的角度分析connect函数的连接过程
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="3.1.6" data-path="../程序员必知必会的网络命令/服务器开发中网络数据分析与故障排查经验漫谈.html">
-
- <a href="../程序员必知必会的网络命令/服务器开发中网络数据分析与故障排查经验漫谈.html">
-
-
- 服务器开发中网络数据分析与故障排查经验漫谈
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="header">Part II</li>
-
-
-
- <li class="chapter " data-level="4.1" data-path="../高性能服务器框架设计/">
-
- <a href="../高性能服务器框架设计/">
-
-
- 高性能服务器框架设计
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="4.1.1" data-path="../高性能服务器框架设计/主线程与工作线程的分工.html">
-
- <a href="../高性能服务器框架设计/主线程与工作线程的分工.html">
-
-
- 主线程与工作线程的分工
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.2" data-path="../高性能服务器框架设计/Reactor模式.html">
-
- <a href="../高性能服务器框架设计/Reactor模式.html">
-
-
- Reactor模式
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.3" data-path="../高性能服务器框架设计/实例:一个服务器程序的架构介绍.html">
-
- <a href="../高性能服务器框架设计/实例:一个服务器程序的架构介绍.html">
-
-
- 实例:一个服务器程序的架构介绍
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.4" data-path="../高性能服务器框架设计/错误码系统的设计.html">
-
- <a href="../高性能服务器框架设计/错误码系统的设计.html">
-
-
- 错误码系统的设计
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.5" data-path="../高性能服务器框架设计/日志系统的设计.html">
-
- <a href="../高性能服务器框架设计/日志系统的设计.html">
-
-
- 日志系统的设计
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.6" data-path="../高性能服务器框架设计/如何设计断线自动重连机制.html">
-
- <a href="../高性能服务器框架设计/如何设计断线自动重连机制.html">
-
-
- 如何设计断线自动重连机制
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.7" data-path="../高性能服务器框架设计/心跳包机制设计详解.html">
-
- <a href="../高性能服务器框架设计/心跳包机制设计详解.html">
-
-
- 心跳包机制设计详解
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.8" data-path="../高性能服务器框架设计/业务数据处理一定要单独开线程吗.html">
-
- <a href="../高性能服务器框架设计/业务数据处理一定要单独开线程吗.html">
-
-
- 业务数据处理一定要单独开线程吗
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="4.1.9" data-path="../高性能服务器框架设计/C++高性能服务器网络框架设计细节.html">
-
- <a href="../高性能服务器框架设计/C++高性能服务器网络框架设计细节.html">
-
-
- C++ 高性能服务器网络框架设计细节
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="divider"></li>
-
-
-
- <li class="chapter " data-level="5.1" data-path="../服务器开发案例实战/">
-
- <a href="../服务器开发案例实战/">
-
-
- 服务器开发案例实战
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="5.1.1" data-path="../服务器开发案例实战/从零实现一个http服务器.html">
-
- <a href="../服务器开发案例实战/从零实现一个http服务器.html">
-
-
- 从零实现一个http服务器
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="5.1.2" data-path="../服务器开发案例实战/从零实现一款12306刷票软件.html">
-
- <a href="../服务器开发案例实战/从零实现一款12306刷票软件.html">
-
-
- 从零实现一款12306刷票软件
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="5.1.3" data-path="../服务器开发案例实战/从零实现一个邮件收发客户端.html">
-
- <a href="../服务器开发案例实战/从零实现一个邮件收发客户端.html">
-
-
- 从零实现一个邮件收发客户端
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="5.1.4" data-path="../服务器开发案例实战/从零开发一个WebSocket服务器.html">
-
- <a href="../服务器开发案例实战/从零开发一个WebSocket服务器.html">
-
-
- 从零开发一个WebSocket服务器
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="5.1.5" data-path="../服务器开发案例实战/1从一款多人联机实时对战游戏开始.html">
-
- <a href="../服务器开发案例实战/1从一款多人联机实时对战游戏开始.html">
-
-
- 从零学习开源项目系列(一) 从一款多人联机实时对战游戏开始
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="5.1.6" data-path="../服务器开发案例实战/2最后一战概况.html">
-
- <a href="../服务器开发案例实战/2最后一战概况.html">
-
-
- 从零学习开源项目系列(二) 最后一战概况
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="5.1.7" data-path="../服务器开发案例实战/3CSBattleMgr服务源码研究.html">
-
- <a href="../服务器开发案例实战/3CSBattleMgr服务源码研究.html">
-
-
- 从零学习开源项目系列(三) CSBattleMgr服务源码研究
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="5.1.8" data-path="../服务器开发案例实战/4LogServer源码探究.html">
-
- <a href="../服务器开发案例实战/4LogServer源码探究.html">
-
-
- 从零学习开源项目系列(四)LogServer源码探究
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="header">Part III</li>
-
-
-
- <li class="chapter " data-level="6.1" data-path="../TeamTalk源码解析/">
-
- <a href="../TeamTalk源码解析/">
-
-
- TeamTalk IM源码分析
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="6.1.1" data-path="../TeamTalk源码解析/01TeamTalk介绍.html">
-
- <a href="../TeamTalk源码解析/01TeamTalk介绍.html">
-
-
- 01 TeamTalk介绍
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.2" data-path="../TeamTalk源码解析/02服务器端的程序的编译与部署.html">
-
- <a href="../TeamTalk源码解析/02服务器端的程序的编译与部署.html">
-
-
- 02 服务器端的程序的编译与部署
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.3" data-path="../TeamTalk源码解析/03服务器端的程序架构介绍.html">
-
- <a href="../TeamTalk源码解析/03服务器端的程序架构介绍.html">
-
-
- 03 服务器端的程序架构介绍
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.4" data-path="../TeamTalk源码解析/04服务器端db_proxy_server源码分析.html">
-
- <a href="../TeamTalk源码解析/04服务器端db_proxy_server源码分析.html">
-
-
- 04 服务器端db_proxy_server源码分析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.5" data-path="../TeamTalk源码解析/05服务器端msg_server源码分析.html">
-
- <a href="../TeamTalk源码解析/05服务器端msg_server源码分析.html">
-
-
- 05 服务器端msg_server源码分析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.6" data-path="../TeamTalk源码解析/06服务器端login_server源码分析.html">
-
- <a href="../TeamTalk源码解析/06服务器端login_server源码分析.html">
-
-
- 06 服务器端login_server源码分析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.7" data-path="../TeamTalk源码解析/07服务器端msfs源码分析.html">
-
- <a href="../TeamTalk源码解析/07服务器端msfs源码分析.html">
-
-
- 07 服务器端msfs源码分析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.8" data-path="../TeamTalk源码解析/08服务器端file_server源码分析.html">
-
- <a href="../TeamTalk源码解析/08服务器端file_server源码分析.html">
-
-
- 08 服务器端file_server源码分析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.9" data-path="../TeamTalk源码解析/09服务器端route_server源码分析.html">
-
- <a href="../TeamTalk源码解析/09服务器端route_server源码分析.html">
-
-
- 09 服务器端route_server源码分析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.10" data-path="../TeamTalk源码解析/10开放一个TeamTalk测试服务器地址和几个测试账号.html">
-
- <a href="../TeamTalk源码解析/10开放一个TeamTalk测试服务器地址和几个测试账号.html">
-
-
- 10 开放一个TeamTalk测试服务器地址和几个测试账号
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="6.1.11" data-path="../TeamTalk源码解析/11pc客户端源码分析.html">
-
- <a href="../TeamTalk源码解析/11pc客户端源码分析.html">
-
-
- 11 pc客户端源码分析
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="divider"></li>
-
-
-
- <li class="chapter " data-level="7.1" data-path="../libevent源码深度剖析/">
-
- <a href="../libevent源码深度剖析/">
-
-
- libevent源码深度剖析
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="7.1.1" data-path="../libevent源码深度剖析/libevent源码深度剖析01.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析01.html">
-
-
- libevent源码深度剖析01
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.2" data-path="../libevent源码深度剖析/libevent源码深度剖析02.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析02.html">
-
-
- libevent源码深度剖析02
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.3" data-path="../libevent源码深度剖析/libevent源码深度剖析03.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析03.html">
-
-
- libevent源码深度剖析03
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.4" data-path="../libevent源码深度剖析/libevent源码深度剖析04.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析04.html">
-
-
- libevent源码深度剖析04
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.5" data-path="../libevent源码深度剖析/libevent源码深度剖析05.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析05.html">
-
-
- libevent源码深度剖析05
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.6" data-path="../libevent源码深度剖析/libevent源码深度剖析06.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析06.html">
-
-
- libevent源码深度剖析06
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.7" data-path="../libevent源码深度剖析/libevent源码深度剖析07.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析07.html">
-
-
- libevent源码深度剖析07
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.8" data-path="../libevent源码深度剖析/libevent源码深度剖析08.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析08.html">
-
-
- libevent源码深度剖析08
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.9" data-path="../libevent源码深度剖析/libevent源码深度剖析09.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析09.html">
-
-
- libevent源码深度剖析09
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.10" data-path="../libevent源码深度剖析/libevent源码深度剖析10.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析10.html">
-
-
- libevent源码深度剖析10
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.11" data-path="../libevent源码深度剖析/libevent源码深度剖析11.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析11.html">
-
-
- libevent源码深度剖析11
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.12" data-path="../libevent源码深度剖析/libevent源码深度剖析12.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析12.html">
-
-
- libevent源码深度剖析12
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.1.13" data-path="../libevent源码深度剖析/libevent源码深度剖析13.html">
-
- <a href="../libevent源码深度剖析/libevent源码深度剖析13.html">
-
-
- libevent源码深度剖析13
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="7.2" data-path="../leveldb源码分析/">
-
- <a href="../leveldb源码分析/">
-
-
- leveldb源码分析
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="7.2.1" data-path="../leveldb源码分析/leveldb源码分析1.html">
-
- <a href="../leveldb源码分析/leveldb源码分析1.html">
-
-
- leveldb源码分析1
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.2" data-path="../leveldb源码分析/leveldb源码分析2.html">
-
- <a href="../leveldb源码分析/leveldb源码分析2.html">
-
-
- leveldb源码分析2
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.3" data-path="../leveldb源码分析/leveldb源码分析3.html">
-
- <a href="../leveldb源码分析/leveldb源码分析3.html">
-
-
- leveldb源码分析3
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.4" data-path="../leveldb源码分析/leveldb源码分析4.html">
-
- <a href="../leveldb源码分析/leveldb源码分析4.html">
-
-
- leveldb源码分析4
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.5" data-path="../leveldb源码分析/leveldb源码分析5.html">
-
- <a href="../leveldb源码分析/leveldb源码分析5.html">
-
-
- leveldb源码分析5
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.6" data-path="../leveldb源码分析/leveldb源码分析6.html">
-
- <a href="../leveldb源码分析/leveldb源码分析6.html">
-
-
- leveldb源码分析6
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.7" data-path="../leveldb源码分析/leveldb源码分析7.html">
-
- <a href="../leveldb源码分析/leveldb源码分析7.html">
-
-
- leveldb源码分析7
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.8" data-path="../leveldb源码分析/leveldb源码分析8.html">
-
- <a href="../leveldb源码分析/leveldb源码分析8.html">
-
-
- leveldb源码分析8
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.9" data-path="../leveldb源码分析/leveldb源码分析9.html">
-
- <a href="../leveldb源码分析/leveldb源码分析9.html">
-
-
- leveldb源码分析9
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.10" data-path="../leveldb源码分析/leveldb源码分析10.html">
-
- <a href="../leveldb源码分析/leveldb源码分析10.html">
-
-
- leveldb源码分析10
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.11" data-path="../leveldb源码分析/leveldb源码分析11.html">
-
- <a href="../leveldb源码分析/leveldb源码分析11.html">
-
-
- leveldb源码分析11
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.12" data-path="../leveldb源码分析/leveldb源码分析12.html">
-
- <a href="../leveldb源码分析/leveldb源码分析12.html">
-
-
- leveldb源码分析12
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.13" data-path="../leveldb源码分析/leveldb源码分析13.html">
-
- <a href="../leveldb源码分析/leveldb源码分析13.html">
-
-
- leveldb源码分析13
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.14" data-path="../leveldb源码分析/leveldb源码分析14.html">
-
- <a href="../leveldb源码分析/leveldb源码分析14.html">
-
-
- leveldb源码分析14
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.15" data-path="../leveldb源码分析/leveldb源码分析15.html">
-
- <a href="../leveldb源码分析/leveldb源码分析15.html">
-
-
- leveldb源码分析15
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.16" data-path="../leveldb源码分析/leveldb源码分析16.html">
-
- <a href="../leveldb源码分析/leveldb源码分析16.html">
-
-
- leveldb源码分析16
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.17" data-path="../leveldb源码分析/leveldb源码分析17.html">
-
- <a href="../leveldb源码分析/leveldb源码分析17.html">
-
-
- leveldb源码分析17
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.18" data-path="../leveldb源码分析/leveldb源码分析18.html">
-
- <a href="../leveldb源码分析/leveldb源码分析18.html">
-
-
- leveldb源码分析18
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.19" data-path="../leveldb源码分析/leveldb源码分析19.html">
-
- <a href="../leveldb源码分析/leveldb源码分析19.html">
-
-
- leveldb源码分析19
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.20" data-path="../leveldb源码分析/leveldb源码分析20.html">
-
- <a href="../leveldb源码分析/leveldb源码分析20.html">
-
-
- leveldb源码分析20
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.21" data-path="../leveldb源码分析/leveldb源码分析21.html">
-
- <a href="../leveldb源码分析/leveldb源码分析21.html">
-
-
- leveldb源码分析21
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="7.2.22" data-path="../leveldb源码分析/leveldb源码分析22.html">
-
- <a href="../leveldb源码分析/leveldb源码分析22.html">
-
-
- leveldb源码分析22
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="divider"></li>
-
-
-
- <li class="chapter " data-level="8.1" data-path="../Memcached源码分析/">
-
- <a href="../Memcached源码分析/">
-
-
- Memcached源码分析
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="8.1.1" data-path="../Memcached源码分析/00服务器资源调整.html">
-
- <a href="../Memcached源码分析/00服务器资源调整.html">
-
-
- 00 服务器资源调整
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.2" data-path="../Memcached源码分析/01初始化参数解析.html">
-
- <a href="../Memcached源码分析/01初始化参数解析.html">
-
-
- 01 初始化参数解析
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.3" data-path="../Memcached源码分析/02网络监听的建立.html">
-
- <a href="../Memcached源码分析/02网络监听的建立.html">
-
-
- 02 网络监听的建立
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.4" data-path="../Memcached源码分析/03网络连接建立.html">
-
- <a href="../Memcached源码分析/03网络连接建立.html">
-
-
- 03 网络连接建立
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.5" data-path="../Memcached源码分析/04内存初始化.html">
-
- <a href="../Memcached源码分析/04内存初始化.html">
-
-
- 04 内存初始化
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.6" data-path="../Memcached源码分析/05资源初始化.html">
-
- <a href="../Memcached源码分析/05资源初始化.html">
-
-
- 05 资源初始化
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.7" data-path="../Memcached源码分析/06get过程.html">
-
- <a href="../Memcached源码分析/06get过程.html">
-
-
- 06 get过程
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.8" data-path="../Memcached源码分析/07cas属性.html">
-
- <a href="../Memcached源码分析/07cas属性.html">
-
-
- 07 cas属性
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.9" data-path="../Memcached源码分析/08内存池.html">
-
- <a href="../Memcached源码分析/08内存池.html">
-
-
- 08 内存池
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.10" data-path="../Memcached源码分析/09连接队列.html">
-
- <a href="../Memcached源码分析/09连接队列.html">
-
-
- 09 连接队列
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.11" data-path="../Memcached源码分析/10Hash表操作.html">
-
- <a href="../Memcached源码分析/10Hash表操作.html">
-
-
- 10 Hash表操作
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.12" data-path="../Memcached源码分析/12set操作.html">
-
- <a href="../Memcached源码分析/12set操作.html">
-
-
- 12 set操作
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.13" data-path="../Memcached源码分析/13do_item_alloc操作.html">
-
- <a href="../Memcached源码分析/13do_item_alloc操作.html">
-
-
- 13 do_item_alloc操作
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.14" data-path="../Memcached源码分析/14item结构.html">
-
- <a href="../Memcached源码分析/14item结构.html">
-
-
- 14 item结构
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.15" data-path="../Memcached源码分析/15Hash表扩容.html">
-
- <a href="../Memcached源码分析/15Hash表扩容.html">
-
-
- 15 Hash表扩容
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.16" data-path="../Memcached源码分析/16线程交互.html">
-
- <a href="../Memcached源码分析/16线程交互.html">
-
-
- 16 线程交互
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="8.1.17" data-path="../Memcached源码分析/17状态机.html">
-
- <a href="../Memcached源码分析/17状态机.html">
-
-
- 17 状态机
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="divider"></li>
-
-
-
- <li class="chapter " data-level="9.1" data-path="./">
-
- <a href="./">
-
-
- 游戏开发专题
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter active" data-level="9.1.1" data-path="1游戏服务器开发的基本体系与服务器端开发的一些建议.html">
-
- <a href="1游戏服务器开发的基本体系与服务器端开发的一些建议.html">
-
-
- 1 游戏服务器开发的基本体系与服务器端开发的一些建议
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.2" data-path="2网络游戏服务器开发框架设计介绍.html">
-
- <a href="2网络游戏服务器开发框架设计介绍.html">
-
-
- 2 网络游戏服务器开发框架设计介绍
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.3" data-path="3游戏后端开发需要掌握的知识.html">
-
- <a href="3游戏后端开发需要掌握的知识.html">
-
-
- 3 游戏后端开发需要掌握的知识
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.4" data-path="4关于游戏服务端架构的整理.html">
-
- <a href="4关于游戏服务端架构的整理.html">
-
-
- 4 关于游戏服务端架构的整理
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.5" data-path="5各类游戏对应的服务端架构.html">
-
- <a href="5各类游戏对应的服务端架构.html">
-
-
- 5 各类游戏对应的服务端架构
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.6" data-path="6从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则.html">
-
- <a href="6从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则.html">
-
-
- 6 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.7" data-path="7QQ游戏百万人同时在线服务器架构实现.html">
-
- <a href="7QQ游戏百万人同时在线服务器架构实现.html">
-
-
- 7 QQ游戏百万人同时在线服务器架构实现
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.8" data-path="8大型多人在线游戏服务器架构设计.html">
-
- <a href="8大型多人在线游戏服务器架构设计.html">
-
-
- 8 大型多人在线游戏服务器架构设计
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.9" data-path="9百万用户级游戏服务器架构设计.html">
-
- <a href="9百万用户级游戏服务器架构设计.html">
-
-
- 9 百万用户级游戏服务器架构设计
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.10" data-path="10十万在线的WebGame的数据库设计思路.html">
-
- <a href="10十万在线的WebGame的数据库设计思路.html">
-
-
- 10 十万在线的WebGame的数据库设计思路
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.11" data-path="11一种高性能网络游戏服务器架构设计.html">
-
- <a href="11一种高性能网络游戏服务器架构设计.html">
-
-
- 11 一种高性能网络游戏服务器架构设计
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.12" data-path="12经典游戏服务器端架构概述.html">
-
- <a href="12经典游戏服务器端架构概述.html">
-
-
- 12 经典游戏服务器端架构概述
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="9.1.13" data-path="13游戏跨服架构进化之路.html">
-
- <a href="13游戏跨服架构进化之路.html">
-
-
- 13 游戏跨服架构进化之路
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
-
- <li class="header">Part IV</li>
-
-
-
- <li class="chapter " data-level="10.1" data-path="../程序员面试题精讲/">
-
- <a href="../程序员面试题精讲/">
-
-
- 程序员面试题精讲
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.1.1" data-path="../程序员面试题精讲/腾讯后台开发实习生技能要求.html">
-
- <a href="../程序员面试题精讲/腾讯后台开发实习生技能要求.html">
-
-
- 腾讯后台开发实习生技能要求
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.1.2" data-path="../程序员面试题精讲/聊聊如何拿大厂的offer.html">
-
- <a href="../程序员面试题精讲/聊聊如何拿大厂的offer.html">
-
-
- 聊聊如何拿大厂的 offer
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.1.3" data-path="../程序员面试题精讲/网络通信题目集锦.html">
-
- <a href="../程序员面试题精讲/网络通信题目集锦.html">
-
-
- 网络通信题目集锦
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.1.4" data-path="../程序员面试题精讲/我面试后端开发经理的经历.html">
-
- <a href="../程序员面试题精讲/我面试后端开发经理的经历.html">
-
-
- 我面试后端开发经理的经历
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.1.5" data-path="../程序员面试题精讲/LinuxCC++后端开发面试问哪些问题.html">
-
- <a href="../程序员面试题精讲/LinuxCC++后端开发面试问哪些问题.html">
-
-
- Linux C/C++后端开发面试问哪些问题
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="10.2" data-path="../职业规划/">
-
- <a href="../职业规划/">
-
-
- 职业规划
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.2.1" data-path="../职业规划/给工作4年迷茫的程序员们的一点建议.html">
-
- <a href="../职业规划/给工作4年迷茫的程序员们的一点建议.html">
-
-
- 给工作 4 年迷茫的程序员们的一点建议
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.2.2" data-path="../职业规划/聊聊技术人员的常见的职业问题.html">
-
- <a href="../职业规划/聊聊技术人员的常见的职业问题.html">
-
-
- 聊聊技术人员的常见的职业问题
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.2.3" data-path="../职业规划/写给那些傻傻想做服务器开发的朋友.html">
-
- <a href="../职业规划/写给那些傻傻想做服务器开发的朋友.html">
-
-
- 写给那些傻傻想做服务器开发的朋友
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="10.3" data-path="../自我提升与开源代码/">
-
- <a href="../自我提升与开源代码/">
-
-
- 自我提升与开源代码
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.3.1" data-path="../自我提升与开源代码/2020年好好读一读开源代码吧.html">
-
- <a href="../自我提升与开源代码/2020年好好读一读开源代码吧.html">
-
-
- 2020 年好好读一读开源代码吧
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="10.4" data-path="../后端开发相关的书籍/">
-
- <a href="../后端开发相关的书籍/">
-
-
- 后端开发相关的书籍
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.4.1" data-path="../后端开发相关的书籍/后台开发应该读的书.html">
-
- <a href="../后端开发相关的书籍/后台开发应该读的书.html">
-
-
- 后台开发应该读的书
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="10.5" data-path="../程序员的简历/">
-
- <a href="../程序员的简历/">
-
-
- 程序员的简历
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.5.1" data-path="../程序员的简历/程序员如何写简历.html">
-
- <a href="../程序员的简历/程序员如何写简历.html">
-
-
- 程序员如何写简历
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="10.6" data-path="../程序员的薪资与年终奖那些事儿/">
-
- <a href="../程序员的薪资与年终奖那些事儿/">
-
-
- 程序员的薪资与年终奖那些事儿
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.6.1" data-path="../程序员的薪资与年终奖那些事儿/技术面试与HR谈薪资技巧.html">
-
- <a href="../程序员的薪资与年终奖那些事儿/技术面试与HR谈薪资技巧.html">
-
-
- 技术面试与HR谈薪资技巧
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.6.2" data-path="../程序员的薪资与年终奖那些事儿/聊一聊程序员如何增加收入.html">
-
- <a href="../程序员的薪资与年终奖那些事儿/聊一聊程序员如何增加收入.html">
-
-
- 聊一聊程序员如何增加收入
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.6.3" data-path="../程序员的薪资与年终奖那些事儿/谈一谈年终奖.html">
-
- <a href="../程序员的薪资与年终奖那些事儿/谈一谈年终奖.html">
-
-
- 谈一谈年终奖
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="10.7" data-path="../程序员的烦心事/">
-
- <a href="../程序员的烦心事/">
-
-
- 程序员的烦心事
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.7.1" data-path="../程序员的烦心事/拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒绝原因并极力要求加入,我该不该去?.html">
-
- <a href="../程序员的烦心事/拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒绝原因并极力要求加入,我该不该去?.html">
-
-
- 拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒绝原因并极力要求加入,我该不该去?
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.7.2" data-path="../程序员的烦心事/我是一名程序员,结婚时女友要求我用两年的工资作为彩礼,我该不该答应?.html">
-
- <a href="../程序员的烦心事/我是一名程序员,结婚时女友要求我用两年的工资作为彩礼,我该不该答应?.html">
-
-
- 我是一名程序员,结婚时女友要求我用两年的工资作为彩礼,我该不该答应?
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
- <li class="chapter " data-level="10.8" data-path="../作者的故事/">
-
- <a href="../作者的故事/">
-
-
- 作者的故事
-
- </a>
-
-
- <ul class="articles">
-
-
- <li class="chapter " data-level="10.8.1" data-path="../作者的故事/我的2019.html">
-
- <a href="../作者的故事/我的2019.html">
-
-
- 我的 2019
-
- </a>
-
-
- </li>
-
- <li class="chapter " data-level="10.8.2" data-path="../作者的故事/我是如何年薪五十万的.html">
-
- <a href="../作者的故事/我是如何年薪五十万的.html">
-
-
- 我是如何年薪五十万的
-
- </a>
-
-
- </li>
-
- </ul>
-
- </li>
-
-
- <li class="divider"></li>
- <li>
- <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
- Published with GitBook
- </a>
- </li>
- </ul>
- </nav>
-
-
- </div>
- <!-- Content nav -->
- <div class="book-anchor">
- <div class="book-anchor-title">在这篇文章中:</div>
- <div class="book-anchor-body">
- </div>
- </div>
- <div class="book-body">
-
- <div class="body-inner">
-
-
- <div class="book-header" role="navigation">
-
- <!-- Title -->
- <h1>
- <i class="fa fa-circle-o-notch fa-spin"></i>
- <a href="../.." >1 游戏服务器开发的基本体系与服务器端开发的一些建议</a>
- </h1>
- </div>
- <div class="page-wrapper" tabindex="-1" role="main">
- <div class="page-inner">
-
- <div id="book-search-results">
- <div class="search-noresults">
-
- <section class="normal markdown-section">
-
- <div id="anchor-navigation-ex-navbar"><i class="fa fa-navicon"></i><ul><li><span class="title-icon "></span><a href="#1-游戏服务器开发的基本体系与服务器端开发的一些建议"><b></b>1 游戏服务器开发的基本体系与服务器端开发的一些建议</a></li><ul><ul><li><span class="title-icon "></span><a href="#一,系统初始化"><b></b>一,系统初始化</a></li><li><span class="title-icon "></span><a href="#二,游戏逻辑"><b></b>二,游戏逻辑</a></li><li><span class="title-icon "></span><a href="#三,数据库系统"><b></b>三,数据库系统</a></li><li><span class="title-icon "></span><a href="#四,缓存系统"><b></b>四,缓存系统</a></li><li><span class="title-icon "></span><a href="#五,游戏日志"><b></b>五,游戏日志</a></li><li><span class="title-icon "></span><a href="#六,-游戏管理工具"><b></b>六, 游戏管理工具</a></li><li><span class="title-icon "></span><a href="#七,公共组件"><b></b>七,公共组件</a></li><li><span class="title-icon "></span><a href="#服务器端开发的一些建议"><b></b>服务器端开发的一些建议</a></li></ul><li><span class="title-icon "></span><a href="#一、专业基础"><b></b>一、专业基础</a></li><ul><li><span class="title-icon "></span><a href="#11网络"><b></b>1.1网络</a></li><li><span class="title-icon "></span><a href="#12存储"><b></b>1.2存储</a></li><li><span class="title-icon "></span><a href="#13程序"><b></b>1.3程序</a></li></ul><li><span class="title-icon "></span><a href="#二、游戏开发入门"><b></b>二、游戏开发入门</a></li><ul><li><span class="title-icon "></span><a href="#21防御式编程"><b></b>2.1防御式编程</a></li><li><span class="title-icon "></span><a href="#22设计模式"><b></b>2.2设计模式</a></li><li><span class="title-icon "></span><a href="#23网络模型"><b></b>2.3网络模型</a></li><li><span class="title-icon "></span><a href="#24数据持久化"><b></b>2.4数据持久化</a></li><li><span class="title-icon "></span><a href="#25内存管理"><b></b>2.5内存管理</a></li><li><span class="title-icon "></span><a href="#26日志系统"><b></b>2.6日志系统</a></li><li><span class="title-icon "></span><a href="#27通信协议"><b></b>2.7通信协议</a></li><li><span class="title-icon "></span><a href="#28全局唯一key(guid)"><b></b>2.8全局唯一Key(GUID)</a></li><li><span class="title-icon "></span><a href="#29多线程与同步"><b></b>2.9多线程与同步</a></li><li><span class="title-icon "></span><a href="#210状态机"><b></b>2.10状态机</a></li><li><span class="title-icon "></span><a href="#211数据包操作"><b></b>2.11数据包操作</a></li><li><span class="title-icon "></span><a href="#212状态监控"><b></b>2.12状态监控</a></li><li><span class="title-icon "></span><a href="#213包频率控制"><b></b>2.13包频率控制</a></li><li><span class="title-icon "></span><a href="#214开关控制"><b></b>2.14开关控制</a></li><li><span class="title-icon "></span><a href="#215反外挂反作弊"><b></b>2.15反外挂反作弊</a></li><li><span class="title-icon "></span><a href="#216热更新"><b></b>2.16热更新</a></li><li><span class="title-icon "></span><a href="#217防刷"><b></b>2.17防刷</a></li><li><span class="title-icon "></span><a href="#218防崩溃"><b></b>2.18防崩溃</a></li><li><span class="title-icon "></span><a href="#219性能优化"><b></b>2.19性能优化</a></li><li><span class="title-icon "></span><a href="#220运营支持"><b></b>2.20运营支持</a></li><li><span class="title-icon "></span><a href="#221容灾与故障预案"><b></b>2.21容灾与故障预案</a></li></ul><li><span class="title-icon "></span><a href="#三、服务器端架构"><b></b>三、服务器端架构</a></li><ul><li><span class="title-icon "></span><a href="#31什么是好的架构?"><b></b>3.1什么是好的架构?</a></li><li><span class="title-icon "></span><a href="#32架构实践的思考"><b></b>3.2架构实践的思考</a></li><li><span class="title-icon "></span><a href="#各个服务器的简要说明:"><b></b>各个服务器的简要说明:</a></li></ul></ul></ul></div><h1 id="1-游戏服务器开发的基本体系与服务器端开发的一些建议"><a name="1-游戏服务器开发的基本体系与服务器端开发的一些建议" class="anchor-navigation-ex-anchor" href="#1-游戏服务器开发的基本体系与服务器端开发的一些建议"><i class="fa fa-link" aria-hidden="true"></i></a>1 游戏服务器开发的基本体系与服务器端开发的一些建议</h1>
- <p>近年来,我身边的朋友有很多都从web转向了游戏开发。他们以前都没有做过游戏服务器开发,更谈不上什么经验,而从网上找的例子或游戏方面的知识,又是那么的少,那么的零散。当他们进入游戏公司时,显得一脸茫然。如果是大公司还好点,起码有人带带,能学点经验,但是有些人是直接进入了小公司,甚至这些小公司只有他一个后台。他们一肩扛起了公司的游戏后端的研发,也扛起了公司的成败。他们也非常尽力,他们也想把游戏的后端做好。可是就是因为没什么经验,刚开始时以为做游戏服务器和做web差不多,但是经过一段时间之后,才发现代码太多,太乱了,一看代码都想重构,都是踩着坑往前走。</p>
- <p><strong>这里我把一些游戏开发方面的东西整理一下,希望能对那些想做游戏服务器开发的朋友有所帮助。</strong></p>
- <p>首先,要明确一点,做游戏服务器开发和做传统的web开发有着本质的区别。游戏服务器开发,如果没有经验,一开始根本没有一个明确清析的目标,不像web那样,有些明确的MVC架构,往往就是为了尽快满足策划的需求,尽快的实现功能,尽快能让游戏跑起来。但是随着功能越来越多,在老代码上面修改的越来越频繁,游戏测试时暴露出来的一堆bug,更让人觉得束手无策,这个时候我们想到了重构,想到了架构的设计。
- 游戏的构架设计非常重要,好的构架代码清析,责任明确,扩展性强,易调试。这些会为我们的开发省去不少时间。<strong>那要怎么样设计游戏的构架呢?</strong>可能每个游戏都不一样,但是本质上还是差不多的。
- 对于游戏服务器的构架设计,我们首先<strong>要了解游戏的服务器构架都有什么组成的?</strong>一款游戏到上线,<strong>需要具备哪些功能?</strong>有些人可能会说,只要让游戏跑起来,访问服务器不出问题不就行了吗?答案是不行的,游戏构架本身代表的是一个体系,它包括:</p>
- <ol>
- <li>系统初始化 </li>
- <li>游戏逻辑</li>
- <li>数据库系统</li>
- <li>缓存系统</li>
- <li>游戏日志</li>
- <li>游戏管理工具</li>
- <li>公共服务组件</li>
- </ol>
- <p>这一系统的东西都是不可少的,它们共同服务于游戏的整个运营过程。我们一点点来介绍各个系统的功能。</p>
- <h3 id="一,系统初始化"><a name="一,系统初始化" class="anchor-navigation-ex-anchor" href="#一,系统初始化"><i class="fa fa-link" aria-hidden="true"></i></a>一,系统初始化</h3>
- <p>系统初始化是在没有客户端连接的时候,服务器启动时所需要做的工作。<strong>基本上就是配置文件的读取,初始化系统参数。</strong></p>
- <p>但是我们必须要考虑的是:</p>
- <ul>
- <li>系统初始化需要的参数配置在哪儿,是配置在本地服务器,还是配置在数据库;</li>
- <li>服务器启动的时候去数据库取;</li>
- <li>配置的修改需不需要重启服务器等。</li>
- </ul>
- <h3 id="二,游戏逻辑"><a name="二,游戏逻辑" class="anchor-navigation-ex-anchor" href="#二,游戏逻辑"><i class="fa fa-link" aria-hidden="true"></i></a>二,游戏逻辑</h3>
- <p><strong>游戏逻辑是游戏的核心功能实现,也是整个游戏的服务中心,它被开发的好坏,直接决定了游戏服务器在运行中的性能。</strong>那在<strong>游戏逻辑的开发中我们要注意些什么呢?</strong>
- 游戏是一种网络交互比较强的业务,好的底层通信,可以最大化游戏的性能,增加单台服务器处理的同时在线人数,给游戏带来更好的体验,至少不容易出现因为网络层导致的数据交互卡顿的现象。在这里我推荐使用<strong>Netty</strong>,它是目前最流行的NIO框架,它的用法可以在我之前的文章中查看,这里不再多说了。
- 有人疑问,<strong>代码也需要分层次?</strong>这个是<strong>当然</strong>了,不同的代码,代表了不同的功能实现。现在的开发语言都是面向对象的,如果我们不加思考,不加整理的把功能代码乱堆一起,起始看起来是快速实现了功能,但是到后期,如果要修改需求,或在原来的代码上增加新的需求,那真是被自己打败了。所以代码一定要分层,主要有以下几层:</p>
- <ol>
- <li><strong>协议层,</strong>也叫前后台交互层,它主要负责与前台交互协议的解析和返回数据。在这一层基本上没有什么业务逻辑实现。<strong>与前台交互的数据都在这一层开始,也在这一层终止。</strong>比如你使用了Netty框架,那么Netty的ChannelHandlerContext即Ctx只能出现在这一层,他不能出现到游戏业务逻辑代码的实现中,接收到客户端的请求,在这一层把需要的参数解析出来,再把参数传到业务逻辑方法中,业务逻辑方法处理完后,把要返回给客户端的数据再返回到这一层,在这一层组织数据,返回给客户端,这样就可以把业务逻辑和网络层分离,业务逻辑只关心业务实现,而且也方便对业务逻辑进行单元测试。</li>
- <li><strong>业务逻辑层</strong>,这里处理真正的游戏逻辑,该计算价格计算价格,该通关的通关,该计时的计时。该保存数据的保存数据。但是这一层不直接操作缓存或数据库,只是处理游戏逻辑计算。因为业务逻辑层是整个游戏事件的处理核心,所以他的处理是否正确直接决定游戏的正确性。所以<strong>这一层的代码要尽量使用面向对象的方法去实现。**</strong>不要出现重复代码或相似的功能进行复制粘贴<strong>,这样修改起来非常不方便,可能是修改了某一处,而忘记了修改另外同样的代码。还要</strong>考虑每个方法都是可测试的<strong>,一个方法的行数最好不要超过一百行。另外,可以</strong>多看看设计模式的书**,它可以帮助我们设计出灵活,整洁的代码。</li>
- </ol>
- <h3 id="三,数据库系统"><a name="三,数据库系统" class="anchor-navigation-ex-anchor" href="#三,数据库系统"><i class="fa fa-link" aria-hidden="true"></i></a>三,数据库系统</h3>
- <p><strong>数据库是存储数据库的核心</strong>,但是游戏数据在存储到数据库的时候会经过网络和磁盘的IO,它的访问速度相对于内存来说是很慢的。一般来说,每次访问数据库都要和数据库建立连接,访问完成之后,为了节省数据库的连接资源,要再把连接断开。</p>
- <p>这样无形中又为服务器增加了开销,在大量的数据访问时,可能会更慢,而游戏又是要求低延时的,<strong>这时该怎么办呢?</strong>我们想到了<strong>数据库连接池</strong>,即把访问数据库的连接放到一个地方管理,用完我不断开,用的时候去那拿,用完再放回去。这样不用每次都建立新的连接了。</p>
- <p>但是如果要我们自己去实现一套连接池管理组件的话,需要时间不说,对技术的把控也是一个考验,还要再经过测试等等,幸好互联网开源的今天,有一些现成的可以使用,这里<strong>推荐Mybatis</strong>,即实现了代码与SQL的分离,又有足够的SQL编写的灵活性,是一个不错的选择。</p>
- <h3 id="四,缓存系统"><a name="四,缓存系统" class="anchor-navigation-ex-anchor" href="#四,缓存系统"><i class="fa fa-link" aria-hidden="true"></i></a>四,缓存系统</h3>
- <p>游戏中,<strong>客户端与服务器的交互是要求低延迟的</strong>,延迟越低,用户体验越好。像之前说过的一样,低延迟就是要求服务器处理业务尽量的快,客户端一个请求过来,要在最短的时间内响应结果,最低不得超过500ms,因为加上来回的网络传输耗时,基本上就是600ms-到700ms了,再长玩家就会觉得游戏卡了。</p>
- <p>如果直接从数据库中取数据,处理完之后再存回数据库的话,这个性能是跟不上的。在服务器,数据在内存中处理是最快的,所以<strong>我们要把一部分常用的数据提前加载到内存中</strong>,比如说游戏数据配置表,经常登陆的玩家数据等。这样在处理业务时,就不用走数据库了,直接从内存中取就可以了,速度更快。</p>
- <p><strong>游戏中常见的缓存</strong>有两种:</p>
- <ol>
- <li>直接把数据存储在jvm或服务器内存中</li>
- <li>使用<strong>第三方的缓存工具,这里推荐Redis</strong>,详细的用法可以自己去查询。<strong>(本公号内有系列文章,详情见【菜单栏】- 【技术文章】 - 【基础系列】 - 【实战R1,实战R2】)</strong></li>
- </ol>
- <h3 id="五,游戏日志"><a name="五,游戏日志" class="anchor-navigation-ex-anchor" href="#五,游戏日志"><i class="fa fa-link" aria-hidden="true"></i></a>五,游戏日志</h3>
- <p>日志是个好东西呀,<strong>一个游戏中更不能少了日志,而且日志一定要记录的详细。</strong>它是玩家在整个游戏中的行为记录,有了这个记录,我们就可以分析玩家的行为,查找游戏的不足,在处理玩家在游戏中的问题时,日志也是一个良好的凭证和快速处理方式。
- 在游戏中,日志分为:</p>
- <ol>
- <li><strong>系统日志</strong>,主要记录游戏服务器的系统情况。比如:数据库能否正常连接,服务器是否正常启动,数据是否正常加载;</li>
- <li><strong>玩家行为日志</strong>,比如玩家发送了什么请求,得到了什么物品,消费了多少货币等等;</li>
- <li><strong>统计日志,</strong>这种日志是对游戏中所有玩家某种行为的一种统计,根据这个统计来分析大部分玩家的行为,得出一些共性或不同之处,以方法运营做不同的活动吸引用户消费。</li>
- </ol>
- <p>在<strong>构架设计中,日志记录一定要做为一种强制行为</strong>,因为不强制的话,可能由于某种原因某个功能忘记加日志了,那么当这个功能出问题了,或者运营跟我们要这个功能的一些数据库,就傻眼了。又得加需求,改代码了。<strong>日志一定要设计一种良好的格式</strong>,日志记录的数据要容易读取,分解。<strong>日志行为可以用枚举描述</strong>,在功能最后的处理方法里面加上这个枚举做为参数,这样不管谁在调用这个方法时,都要去加参数描述。
- 俗话说,工欲善其事,必先利其器。<strong>游戏管理工具是对游戏运行中的一系列问题处理的一种工具。</strong>它不仅是给开发人员用,大多数是给运营使用。游戏上线后,我们需要针对线上的问题进行不同的处理。不可能把所有问题都让程序员去处理吧,于是程序员们想到了一个办法,给你们做一个工具,你们爱谁处理谁处理去吧。</p>
- <h3 id="六,-游戏管理工具"><a name="六,-游戏管理工具" class="anchor-navigation-ex-anchor" href="#六,-游戏管理工具"><i class="fa fa-link" aria-hidden="true"></i></a>六, 游戏管理工具</h3>
- <p>游戏管理工具是一个不断增涨的系统,因为它很多时候是伴随着游戏中遇到的问题而实现的。</p>
- <p>但是根据经验,<strong>有一些功能是必须有的</strong>,比如:</p>
- <ul>
- <li>服务器管理,主要负责服务器的开启,关闭,服务器配置信息,玩家信息查询;</li>
- <li>玩家管理,比如踢人,封号;</li>
- <li>统计查询,玩家行为日志查询,统计查询,次留率查询,邮件服务,修改玩家数据等。</li>
- </ul>
- <p>根据游戏的不同要求,<strong>凡是可以能过工具实现的,都做到游戏管理工具里面。</strong>它是针对所有服务器的管理。</p>
- <p>一个好的,全的游戏管理工具,可以提高游戏运营中遇到问题处理的效率,为玩家提供更好的服务。</p>
- <h3 id="七,公共组件"><a name="七,公共组件" class="anchor-navigation-ex-anchor" href="#七,公共组件"><i class="fa fa-link" aria-hidden="true"></i></a>七,公共组件</h3>
- <p>公共组件是为游戏运行中提供公共的服务。例如:</p>
- <ul>
- <li>充值服务器,我们没必须一个服用一个充值,而且你也不能对外提供多个充值服务器地址,和第三方公司对接,他们绝对不干,这是要疯呀;</li>
- <li>还有运营搞活动时的礼包码;</li>
- <li>还有注册用户的管理,玩家一个注册账号可以进不同的区等。</li>
- </ul>
- <p><strong>这些都是针对所有区服提供的服务,所以要单独做,与游戏逻辑分开</strong>,这样方便管理,部署和负载均衡。</p>
- <p>还有<strong>SDK的登陆验证</strong>,现在手游比较多,与渠道对接里要进行验证,这往往是很多http请求,速度慢,所以这个也<strong>要拿出来单独做</strong>,不要在游戏逻辑中去验证,因为网络IO的访问时间是不可控制的,http是阻塞的请求。</p>
- <p>所以,综上来看,<strong>一个游戏服务器起码有几个大的功能模块组成</strong>:</p>
- <ol>
- <li>游戏逻辑工程;</li>
- <li>日志处理工程;</li>
- <li>充值工程;</li>
- <li>游戏管理工具工程;</li>
- <li>用户登陆工程;</li>
- <li>公共活动工程等。</li>
- </ol>
- <p>根据游戏的不同需要,可能还有其它的。<strong>所在构架的设计中,一定要考虑到系统的分布式部署,尽量把公共的功能拆出来做</strong>,这样可以增强系统的可扩展性。</p>
- <h3 id="服务器端开发的一些建议"><a name="服务器端开发的一些建议" class="anchor-navigation-ex-anchor" href="#服务器端开发的一些建议"><i class="fa fa-link" aria-hidden="true"></i></a>服务器端开发的一些建议</h3>
- <p>本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。</p>
- <ol>
- <li>第一部分 —— <strong>专业基础</strong>,用于指导招聘和实习考核;</li>
- <li>第二部分 —— <strong>游戏入门</strong>,讲述游戏服务器端开发的基本要点;</li>
- <li>第三部分 —— <strong>服务端架构</strong>,介绍架构设计中的一些基本原则。</li>
- </ol>
- <p><strong>希望能帮到大家!</strong></p>
- <h2 id="一、专业基础"><a name="一、专业基础" class="anchor-navigation-ex-anchor" href="#一、专业基础"><i class="fa fa-link" aria-hidden="true"></i></a>一、专业基础</h2>
- <h3 id="11网络"><a name="11网络" class="anchor-navigation-ex-anchor" href="#11网络"><i class="fa fa-link" aria-hidden="true"></i></a>1.1网络</h3>
- <h4 id="111理解tcpip协议"><a name="111理解tcpip协议" class="anchor-navigation-ex-anchor" href="#111理解tcpip协议"><i class="fa fa-link" aria-hidden="true"></i></a>1.1.1理解TCP/IP协议</h4>
- <ul>
- <li>网络传输模型</li>
- <li>滑动窗口技术</li>
- <li>建立连接的三次握手与断开连接的四次握手</li>
- <li>连接建立与断开过程中的各种状态</li>
- <li>TCP/IP协议的传输效率</li>
- </ul>
- <p><strong>思考:</strong></p>
- <ol>
- <li>请解释DOS攻击与DRDOS攻击的基本原理</li>
- <li>一个100Byte数据包,精简到50Byte, 其传输效率提高了50%</li>
- <li>TIMEWAIT状态怎么解释?</li>
- </ol>
- <h4 id="112掌握常用的网络通信模型"><a name="112掌握常用的网络通信模型" class="anchor-navigation-ex-anchor" href="#112掌握常用的网络通信模型"><i class="fa fa-link" aria-hidden="true"></i></a>1.1.2掌握常用的网络通信模型</h4>
- <ul>
- <li>Select</li>
- <li>Epoll,边缘触发与平台出发点区别与应用</li>
- <li>Select与Epoll的区别及应用</li>
- </ul>
- <h3 id="12存储"><a name="12存储" class="anchor-navigation-ex-anchor" href="#12存储"><i class="fa fa-link" aria-hidden="true"></i></a>1.2存储</h3>
- <ul>
- <li>计算机系统存储体系</li>
- <li>程序运行时的内存结构</li>
- <li>计算机文件系统,页表结构</li>
- <li>内存池与对象池的实现原理,应用场景与区别</li>
- <li>关系数据库MySQL的使用(本公众号内有系列文章,详情见【菜单】-【</li>
- <li>共享内存</li>
- </ul>
- <h3 id="13程序"><a name="13程序" class="anchor-navigation-ex-anchor" href="#13程序"><i class="fa fa-link" aria-hidden="true"></i></a>1.3程序</h3>
- <ul>
- <li>对C/C++语言有较深的理解</li>
- <li>深刻理解接口,封装与多态,并且有实践经验</li>
- <li>深刻理解常用的数据结构:数组,链表,二叉树,哈希表</li>
- <li>熟悉常用的算法及相关复杂度:冒泡排序,快速排序</li>
- </ul>
- <h2 id="二、游戏开发入门"><a name="二、游戏开发入门" class="anchor-navigation-ex-anchor" href="#二、游戏开发入门"><i class="fa fa-link" aria-hidden="true"></i></a>二、游戏开发入门</h2>
- <h3 id="21防御式编程"><a name="21防御式编程" class="anchor-navigation-ex-anchor" href="#21防御式编程"><i class="fa fa-link" aria-hidden="true"></i></a>2.1防御式编程</h3>
- <p><strong>不要相信客户端数据,一定要检验。</strong>作为服务器端你无法确定你的客户端是谁,你也不能假定它是善意的,请做好自我保护。<strong>(这是判断一个服务器端程序员是否入门的基本标准)</strong>
- <strong>务必对于函数的传人参数和返回值进行合法性判断,</strong>内部子系统,功能模块之间不要太过信任,要求低耦合,高内聚。
- 插件式的模块设计,模块功能的健壮性应该是内建的,<strong>尽量减少模块间耦合</strong>。</p>
- <h3 id="22设计模式"><a name="22设计模式" class="anchor-navigation-ex-anchor" href="#22设计模式"><i class="fa fa-link" aria-hidden="true"></i></a>2.2设计模式</h3>
- <p><strong>道法自然。</strong>不要迷信,迷恋设计模式,更不要生搬硬套
- <strong>简化</strong>,简化,再简化,用最简单的办法解决问题
- 借大宝一句话:设计本天成,妙手偶得之</p>
- <h3 id="23网络模型"><a name="23网络模型" class="anchor-navigation-ex-anchor" href="#23网络模型"><i class="fa fa-link" aria-hidden="true"></i></a>2.3网络模型</h3>
- <ul>
- <li><strong>自造轮子:</strong> Select, Epoll, <strong>Epoll一定比Select高效吗?</strong></li>
- <li><strong>开源框架</strong>: Libevent, libev, ACE。<strong>(本公众号内有Libevent源码详解,详情见【菜单】-【开源软件】-【源码分析】-【网络库I】)</strong></li>
- </ul>
- <h3 id="24数据持久化"><a name="24数据持久化" class="anchor-navigation-ex-anchor" href="#24数据持久化"><i class="fa fa-link" aria-hidden="true"></i></a><strong>2.4数据持久化</strong></h3>
- <ul>
- <li>自定义文件存储,如《梦幻西游》</li>
- <li>关系数据库: MySQL</li>
- <li>NO-SQL数据库: MongoDB</li>
- <li>选择存储系统要考虑到因素:稳定性,性能,可扩展性</li>
- </ul>
- <h3 id="25内存管理"><a name="25内存管理" class="anchor-navigation-ex-anchor" href="#25内存管理"><i class="fa fa-link" aria-hidden="true"></i></a>2.5内存管理</h3>
- <ul>
- <li>使用内存池和对象池,禁止运行期间动态分配内存</li>
- <li>对于输入输出的指针参数,严格检查,宁滥勿缺</li>
- <li>写内存保护,使用带内存保护的函数(strncpy, memcpy, snprintf, vsnprintf等)</li>
- <li>严防数组下标越界</li>
- <li>防止读内存溢出,确保字符串以'\0'结束</li>
- </ul>
- <h3 id="26日志系统"><a name="26日志系统" class="anchor-navigation-ex-anchor" href="#26日志系统"><i class="fa fa-link" aria-hidden="true"></i></a>2.6日志系统</h3>
- <ul>
- <li><strong>简单高效</strong>,大量日志操作不应该影响程序性能</li>
- <li><strong>稳定</strong>,做到服务器崩溃是日志不丢失</li>
- <li><strong>完备</strong>,玩家关键操作一定要记日志,理想的情况是通过日志能重建任何时刻的玩家数据</li>
- <li><strong>开关</strong>,开发日志的要加级别开关控制</li>
- </ul>
- <h3 id="27通信协议"><a name="27通信协议" class="anchor-navigation-ex-anchor" href="#27通信协议"><i class="fa fa-link" aria-hidden="true"></i></a>2.7通信协议</h3>
- <ul>
- <li>采用<strong>PDL(Protocol Design Language)</strong>, 如Protobuf,可以同时生成前后端代码,减少前后端协议联调成本, 扩展性好</li>
- <li><strong>JSON</strong>,文本协议,简单,自解释,无联调成本,扩展性好,也很方便进行包过滤以及写日志</li>
- <li><strong>自定义二进制协议</strong>,精简,有高效的传输性能,完全可控,几乎无扩展性</li>
- </ul>
- <h3 id="28全局唯一key(guid)"><a name="28全局唯一key(guid)" class="anchor-navigation-ex-anchor" href="#28全局唯一key(guid)"><i class="fa fa-link" aria-hidden="true"></i></a>2.8全局唯一Key(GUID)</h3>
- <ul>
- <li>为合服做准备</li>
- <li>方便追踪道具,装备流向</li>
- <li>每个角色,装备,道具都应对应有全局唯一Key</li>
- </ul>
- <h3 id="29多线程与同步"><a name="29多线程与同步" class="anchor-navigation-ex-anchor" href="#29多线程与同步"><i class="fa fa-link" aria-hidden="true"></i></a>2.9多线程与同步</h3>
- <ul>
- <li>消息队列进行同步化处理</li>
- </ul>
- <h3 id="210状态机"><a name="210状态机" class="anchor-navigation-ex-anchor" href="#210状态机"><i class="fa fa-link" aria-hidden="true"></i></a>2.10状态机</h3>
- <ul>
- <li>强化角色的状态</li>
- <li>前置状态的检查校验</li>
- </ul>
- <h3 id="211数据包操作"><a name="211数据包操作" class="anchor-navigation-ex-anchor" href="#211数据包操作"><i class="fa fa-link" aria-hidden="true"></i></a>2.11数据包操作</h3>
- <ul>
- <li>合并, 同一帧内的数据包进行合并,减少IO操作次数</li>
- <li>单副本, 用一个包尽量只保存一份,减少内存复制次数</li>
- <li>AOI同步中减少中间过程无用数据包</li>
- </ul>
- <h3 id="212状态监控"><a name="212状态监控" class="anchor-navigation-ex-anchor" href="#212状态监控"><i class="fa fa-link" aria-hidden="true"></i></a>2.12状态监控</h3>
- <ul>
- <li>随时监控服务器内部状态</li>
- <li>内存池,对象池使用情况</li>
- <li>帧处理时间</li>
- <li>网络IO</li>
- <li>包处理性能</li>
- <li>各种业务逻辑的处理次数</li>
- </ul>
- <h3 id="213包频率控制"><a name="213包频率控制" class="anchor-navigation-ex-anchor" href="#213包频率控制"><i class="fa fa-link" aria-hidden="true"></i></a>2.13包频率控制</h3>
- <ul>
- <li>基于每个玩家每条协议的包频率控制,瘫痪变速齿轮</li>
- </ul>
- <h3 id="214开关控制"><a name="214开关控制" class="anchor-navigation-ex-anchor" href="#214开关控制"><i class="fa fa-link" aria-hidden="true"></i></a>2.14开关控制</h3>
- <ul>
- <li>每个模块都有开关,可以紧急关闭任何出问题的功能模块</li>
- </ul>
- <h3 id="215反外挂反作弊"><a name="215反外挂反作弊" class="anchor-navigation-ex-anchor" href="#215反外挂反作弊"><i class="fa fa-link" aria-hidden="true"></i></a>2.15反外挂反作弊</h3>
- <ul>
- <li>包频率控制可以消灭变速齿轮</li>
- <li>包id自增校验,可以消灭WPE</li>
- <li>包校验码可以消灭或者拦截篡改的包</li>
- <li>图形识别码,可以踢掉99%非人的操作</li>
- <li><strong>魔高一尺,道高一丈</strong></li>
- </ul>
- <h3 id="216热更新"><a name="216热更新" class="anchor-navigation-ex-anchor" href="#216热更新"><i class="fa fa-link" aria-hidden="true"></i></a>2.16热更新</h3>
- <ul>
- <li>核心配置逻辑的热更新,如防沉迷系统,包频率控制,开关控制等</li>
- <li>代码基本热更新,如Erlang,Lua等</li>
- </ul>
- <h3 id="217防刷"><a name="217防刷" class="anchor-navigation-ex-anchor" href="#217防刷"><i class="fa fa-link" aria-hidden="true"></i></a>2.17防刷</h3>
- <ul>
- <li>关键系统资源(如元宝,精力值,道具,装备等)的产出记日志</li>
- <li>资源的产出和消耗尽量依赖两个或以上的独立条件的检测</li>
- <li>严格检查各项操作的前置条件</li>
- <li>校验参数合法性</li>
- </ul>
- <h3 id="218防崩溃"><a name="218防崩溃" class="anchor-navigation-ex-anchor" href="#218防崩溃"><i class="fa fa-link" aria-hidden="true"></i></a>2.18防崩溃</h3>
- <ul>
- <li>系统底层与具体业务逻辑无关,可以用大量的机器人压力测试暴露各种bug,确保稳定</li>
- <li>业务逻辑建议使用脚本</li>
- <li>系统性的保证游戏不会崩溃</li>
- </ul>
- <h3 id="219性能优化"><a name="219性能优化" class="anchor-navigation-ex-anchor" href="#219性能优化"><i class="fa fa-link" aria-hidden="true"></i></a>2.19性能优化</h3>
- <ul>
- <li>IO操作异步化</li>
- <li>IO操作合并缓写 (事务性的提交db操作,包合并,文件日志缓写)</li>
- <li>Cache机制</li>
- <li>减少竞态条件 (避免频繁进出切换,尽量减少锁定使用,多线程不一定由于单线程) 多线程不一定比单线程快</li>
- <li>减少内存复制</li>
- <li>自己测试,用数据说话,别猜</li>
- </ul>
- <h3 id="220运营支持"><a name="220运营支持" class="anchor-navigation-ex-anchor" href="#220运营支持"><i class="fa fa-link" aria-hidden="true"></i></a>2.20运营支持</h3>
- <ul>
- <li>接口支持:实时查询,控制指令,数据监控,客服处理等</li>
- <li>实现考虑提供http接口</li>
- </ul>
- <h3 id="221容灾与故障预案"><a name="221容灾与故障预案" class="anchor-navigation-ex-anchor" href="#221容灾与故障预案"><i class="fa fa-link" aria-hidden="true"></i></a>2.21容灾与故障预案</h3>
- <p>略</p>
- <h2 id="三、服务器端架构"><a name="三、服务器端架构" class="anchor-navigation-ex-anchor" href="#三、服务器端架构"><i class="fa fa-link" aria-hidden="true"></i></a>三、服务器端架构</h2>
- <h3 id="31什么是好的架构?"><a name="31什么是好的架构?" class="anchor-navigation-ex-anchor" href="#31什么是好的架构?"><i class="fa fa-link" aria-hidden="true"></i></a>3.1什么是好的架构?</h3>
- <ul>
- <li>满足业务要求</li>
- <li>能迅速的实现策划需求,响应需求变更</li>
- <li>系统级的稳定性保障</li>
- <li>简化开发。将复杂性控制在架构底层,降低对开发人员的技术要求,逻辑开发不依赖于开发人员本身强大的技术实力,提高开发效率</li>
- <li>完善的运营支撑体系</li>
- </ul>
- <h3 id="32架构实践的思考"><a name="32架构实践的思考" class="anchor-navigation-ex-anchor" href="#32架构实践的思考"><i class="fa fa-link" aria-hidden="true"></i></a>3.2架构实践的思考</h3>
- <ul>
- <li>简单,满足需求的架构就是好架构</li>
- <li>设计性能,抓住重要的20%, 没必要从程序代码里面去抠性能</li>
- <li>热更新是必须的</li>
- <li>人难免会犯错,尽可能的用一套机制去保障逻辑的健壮性</li>
- </ul>
- <p>游戏服务器的设计是一项颇有挑战性的工作,游戏服务器的发展也由以前的单服结构转变为多服机构,甚至出现了bigworld引擎的分布式解决方案,最近了解到Unreal的服务器解决方案atlas也是基于集群的方式。</p>
- <p> 负载均衡是一个很复杂的课题,这里暂不谈bigworld和atlas的这类服务器的设计,更多的是基于功能和场景划分服务器结构。</p>
- <p>首先说一下<strong>思路</strong>,<strong>服务器划分基于以下原则</strong>:</p>
- <ol>
- <li>分离游戏中占用系统资源(cpu,内存,IO等)较多的功能,独立成服务器。</li>
- <li>在同一服务器架构下的不同游戏,应尽可能的复用某些服务器(进程级别的复用)。</li>
- <li>以多线程并发的编程方式适应多核处理器。</li>
- <li>宁可在服务器之间多复制数据,也要保持清晰的数据流向。</li>
- <li>主要按照场景划分进程,若需按功能划分,必须保持整个逻辑足够的简单,并满足以上1,2点。
- 服务器结构图:</li>
- </ol>
- <p><img src="https://mmbiz.qpic.cn/mmbiz_png/axIncRj5l4e3WnEIEibOmaf1W4QE71eZHiaW5FUiaiaASHibrib8DDXeP0B9gdEiaJBJCkiaq8aOvJosaia24RicEals2ocg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="img"></p>
- <h3 id="各个服务器的简要说明:"><a name="各个服务器的简要说明:" class="anchor-navigation-ex-anchor" href="#各个服务器的简要说明:"><i class="fa fa-link" aria-hidden="true"></i></a>各个服务器的简要说明:</h3>
- <p><strong>Gateway</strong> 是应用网关,主要用于保持和client的连接,该服务器需要2种IO:</p>
- <ol>
- <li>对client采用高并发连接,低吞吐量的网络模型,如IOCP等</li>
- <li>对服务器采用高吞吐量连接,如阻塞或异步IO。</li>
- </ol>
- <p><strong>网关主要有以下用途:</strong></p>
- <ul>
- <li>分担了网络IO资源,同时,也分担了网络消息包的加解密,压缩解压等cpu密集的操作。</li>
- <li> 隔离了client和内部服务器组,对client来说,它只需要知道网关的相关信息即可(ip和port)。client由于一直和网关保持常连接,所以切换场景服务器等操作对client来说是透明的。</li>
- <li>维护玩家登录状态。</li>
- </ul>
- <p><strong>World Server</strong> 是一个控制中心,它负责把各种计算资源分布到各个服务器,<strong>它具有以下职责:</strong></p>
- <hr>
- <pre class="language-"><code>**管理和维护多个Scene Server。
- </code></pre><ul>
- <li>管理和维护多个功能服务器,主要是同步数据到功能服务器。</li>
- <li>复杂转发其他服务器和Gateway之间的数据。</li>
- <li>实现其他需要跨场景的功能,如组队,聊天,帮派等。</li>
- </ul>
- <p><strong>Phys Server</strong> 主要用于玩家移动,碰撞等检测。
- 所有玩家的移动类操作都在该服务器上做检查,所以该服务器本身具备所有地图的地形等相关信息。具体检查过程是这样的:首先,<strong>Worldserver</strong>收到一个移动信息,WorldServer收到后向<strong>Phys Serve</strong>r请求检查,Phys Server检查成功后再返回给<strong>world Server</strong>,然后world server传递给相应的<strong>Scene Server</strong>。</p>
- <p><strong>Scene Server</strong>场景服务器,按场景划分,每个服务器负责的场景应该是可以配置的。理想情况下是可以动态调节的。</p>
- <p><strong>ItemMgr Server</strong> 物品管理服务器,负责所有物品的生产过程。在该服务器上存储一个物品掉落数据库,服务器初始化的时候载入到内存。任何需要产生物品的服务器均与该服务器直接通信。</p>
- <p><strong>AIServer</strong> 又一个功能服务器,负责管理所有NPC的AI。AI服务器通常有2个输入:</p>
- <ul>
- <li>一个是Scene Server发送过来的玩家相关操作信息</li>
- <li>另一个时钟Timer驱动</li>
- </ul>
- <p>在这个设计中,对其他服务器来说,AIServer就是一个拥有很多个NPC的客户端。AIserver需要同步所有与AI相关的数据,包括很多玩家数据。由于AIServer的Timer驱动特性,可在很大程度上使用TBB程序库来发挥多核的性能。</p>
- <p><strong>把网络游戏服务器分拆成多个进程,分开部署。</strong></p>
- <ul>
- <li>这种设计的<strong>好处</strong>是模块自然分离,可以单独设计。分担负荷,可以提高整个系统的承载能力。</li>
- <li><strong>缺点</strong>在于,网络环境并不那么可靠。跨进程通讯有一定的不可预知性。服务器间通讯往往难以架设调试环境,并很容易把事情搅成一团糨糊。而且正确高效的管理多连接,对程序员来说也是一项挑战。</li>
- </ul>
- <p>前些年,我也曾写过好几篇与之相关的设计。这几天在思考一个问题:<strong>如果我们要做一个底层通用模块,让后续开发更为方便。到底要解决怎样的需求?</strong>这个需求应该是单一且基础的,每个应用都需要的。
- 正如 TCP 协议解决了互联网上稳定可靠的点对点数据流通讯一样。游戏世界实际需要的是一个稳定可靠的在游戏系统内的点对点通讯需要。
- 我们可以在一条 TCP 连接之上做到这一点。一旦实现,可以给游戏服务的开发带来极大的方便。
- 可以把游戏系统内的各项服务,包括并不限于登陆,拍卖,战斗场景,数据服务,等等独立服务看成网络上的若干终端。每个玩家也可以是一个独立终端。它们一起构成一个网络。在这个网络之上,终端之间可以进行可靠的连接和通讯。
- <strong>实现可以是这样的:</strong></p>
- <ul>
- <li>每个虚拟终端都在游戏虚拟网络(Game Network)上有一个<strong>唯一地址</strong> (Game Network Address , GNA) 。这个地址可以预先设定,也可以动态分配。每个<strong>终端</strong>都可以通过游戏网络的若干接入点 ( GNAP ) <strong>通过唯一一条 TCP 连接接入网络。</strong></li>
- <li>接入过程需要通过<strong>鉴权</strong>。
- 鉴权过程依赖内部的安全机制,可以包括密码证书,或是特别的接入点区分。(例如,玩家接入网络就需要特定的接入点,这个接入点接入的终端都一定是玩家)</li>
- <li>鉴权通过后,网络为终端分配一个<strong>固定的游戏域名</strong>。例如,玩家进入会分配到 player.12345 这样的域名,数据库接入可能分配到 database 。</li>
- <li>游戏网络<strong>默认提供一个域名查询服务</strong>(这个服务可以通过鉴权的过程注册到网络中),让每个终端都能通过域名查询到对应的地址。</li>
- <li>然后,游戏网络里<strong>所有合法接入的终端都可以通过其地址相互发起连接并通讯</strong>了。</li>
- <li><strong>整个协议建立在 TCP 协议之上,工作于唯一的这个 TCP 连接上</strong>。和直接使用 TCP 连接不同。游戏网络中每个终端之间相互发起连接都是可靠的。不仅玩家可以向某个服务发起连接,反过来也是可以的。玩家之间的直接连接也是可行的(是否允许这样,取决于具体设计)。
- 由于每个虚拟连接都是建立在单一的 TCP 连接之上。所以减少了互连网上发起 TCP 连接的各种不可靠性。<strong>鉴权</strong>过程也是<strong>一次性唯一</strong>的。</li>
- <li>并且我们<strong>提供域名反查服务</strong>,我们的游戏服务可以清楚且安全的知道连接过来的是谁。</li>
- <li><strong>系统</strong>可以<strong>设计为,**</strong>游戏网络上每个终端离网,域名服务将广播这条消息<strong>,通知所有人。这种广播服务在互联网上难以做到,但无论是广播还是组播,在这个虚拟游戏网络中都是可行的。
- 在这种设计上。在逻辑层面,我们</strong>可以<strong>让玩家直接把聊天信息从玩家客互端发送到聊天服务器,而不需要建立多余的 TCP 连接,也不需要对转发处理聊天消息做多余的处理。聊天服务器可以独立的存在于游戏网络。</strong>也<strong>**可以</strong>让广播服务主动向玩家推送消息,由服务器向玩家发起连接,而不是所有连接请求都是由玩家客互端发起。</li>
- <li>虚拟游戏网络的构成是一个独立的层次,完全可以撇开具体游戏逻辑来实现,并能够单独去按承载量考虑具体设计方案。非常利于剥离出具体游戏项目来开发并优化。</li>
- <li>最终,我们或许需要的<strong>一套 C 库</strong>,用于游戏网络内的通讯。api 可以和 socket api 类似。额外多两条接入与离开游戏网络即可。 </li>
- </ul>
- <footer class="page-footer"><span class="copyright">如需下载本站全部技术文章,可以在【高性能服务器开发】公众号回复关键字“文章下载”即可。</span><span class="footer-modification">最近更新时间:
- 2020-09-13 20:27:23
- </span></footer>
- <script>console.log("plugin-popup....");document.onclick = function(e){ e.target.tagName === "IMG" && window.open(e.target.src,e.target.src)}</script><style>img{cursor:pointer}</style>
-
- </section>
-
- </div>
- <div class="search-results">
- <div class="has-results">
-
- <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
- <ul class="search-results-list"></ul>
-
- </div>
- <div class="no-results">
-
- <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
-
- </div>
- </div>
- </div>
- </div>
- </div>
-
- </div>
-
-
- <a href="./" class="navigation navigation-prev " aria-label="Previous page: 游戏开发专题">
- <i class="fa fa-angle-left"></i>
- </a>
-
-
- <a href="2网络游戏服务器开发框架设计介绍.html" class="navigation navigation-next " aria-label="Next page: 2 网络游戏服务器开发框架设计介绍">
- <i class="fa fa-angle-right"></i>
- </a>
-
-
-
- </div>
- <script>
- var gitbook = gitbook || [];
- gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"1 游戏服务器开发的基本体系与服务器端开发的一些建议","level":"9.1.1","depth":2,"next":{"title":"2 网络游戏服务器开发框架设计介绍","level":"9.1.2","depth":2,"path":"articles/游戏开发专题/2网络游戏服务器开发框架设计介绍.md","ref":"articles/游戏开发专题/2网络游戏服务器开发框架设计介绍.md","articles":[]},"previous":{"title":"游戏开发专题","level":"9.1","depth":1,"path":"articles/游戏开发专题/README.md","ref":"articles/游戏开发专题/README.md","articles":[{"title":"1 游戏服务器开发的基本体系与服务器端开发的一些建议","level":"9.1.1","depth":2,"path":"articles/游戏开发专题/1游戏服务器开发的基本体系与服务器端开发的一些建议.md","ref":"articles/游戏开发专题/1游戏服务器开发的基本体系与服务器端开发的一些建议.md","articles":[]},{"title":"2 网络游戏服务器开发框架设计介绍","level":"9.1.2","depth":2,"path":"articles/游戏开发专题/2网络游戏服务器开发框架设计介绍.md","ref":"articles/游戏开发专题/2网络游戏服务器开发框架设计介绍.md","articles":[]},{"title":"3 游戏后端开发需要掌握的知识","level":"9.1.3","depth":2,"path":"articles/游戏开发专题/3游戏后端开发需要掌握的知识.md","ref":"articles/游戏开发专题/3游戏后端开发需要掌握的知识.md","articles":[]},{"title":"4 关于游戏服务端架构的整理","level":"9.1.4","depth":2,"path":"articles/游戏开发专题/4关于游戏服务端架构的整理.md","ref":"articles/游戏开发专题/4关于游戏服务端架构的整理.md","articles":[]},{"title":"5 各类游戏对应的服务端架构","level":"9.1.5","depth":2,"path":"articles/游戏开发专题/5各类游戏对应的服务端架构.md","ref":"articles/游戏开发专题/5各类游戏对应的服务端架构.md","articles":[]},{"title":"6 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则","level":"9.1.6","depth":2,"path":"articles/游戏开发专题/6从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则.md","ref":"articles/游戏开发专题/6从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则.md","articles":[]},{"title":"7 QQ游戏百万人同时在线服务器架构实现","level":"9.1.7","depth":2,"path":"articles/游戏开发专题/7QQ游戏百万人同时在线服务器架构实现.md","ref":"articles/游戏开发专题/7QQ游戏百万人同时在线服务器架构实现.md","articles":[]},{"title":"8 大型多人在线游戏服务器架构设计","level":"9.1.8","depth":2,"path":"articles/游戏开发专题/8大型多人在线游戏服务器架构设计.md","ref":"articles/游戏开发专题/8大型多人在线游戏服务器架构设计.md","articles":[]},{"title":"9 百万用户级游戏服务器架构设计","level":"9.1.9","depth":2,"path":"articles/游戏开发专题/9百万用户级游戏服务器架构设计.md","ref":"articles/游戏开发专题/9百万用户级游戏服务器架构设计.md","articles":[]},{"title":"10 十万在线的WebGame的数据库设计思路","level":"9.1.10","depth":2,"path":"articles/游戏开发专题/10十万在线的WebGame的数据库设计思路.md","ref":"articles/游戏开发专题/10十万在线的WebGame的数据库设计思路.md","articles":[]},{"title":"11 一种高性能网络游戏服务器架构设计","level":"9.1.11","depth":2,"path":"articles/游戏开发专题/11一种高性能网络游戏服务器架构设计.md","ref":"articles/游戏开发专题/11一种高性能网络游戏服务器架构设计.md","articles":[]},{"title":"12 经典游戏服务器端架构概述","level":"9.1.12","depth":2,"path":"articles/游戏开发专题/12经典游戏服务器端架构概述.md","ref":"articles/游戏开发专题/12经典游戏服务器端架构概述.md","articles":[]},{"title":"13 游戏跨服架构进化之路","level":"9.1.13","depth":2,"path":"articles/游戏开发专题/13游戏跨服架构进化之路.md","ref":"articles/游戏开发专题/13游戏跨服架构进化之路.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["chapter-fold","-lunr","-search","search-pro","splitter","popup","back-to-top-button","hide-element","prism","-highlight","tbfed-pagefooter","code","anchor-navigation-ex","theme-fexa","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"如需下载本站全部技术文章,可以在【高性能服务器开发】公众号回复关键字“文章下载”即可。","modify_label":"最近更新时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"chapter-fold":{},"prism":{},"livereload":{},"splitter":{},"search-pro":{},"popup":{},"theme-fexa":{"search-placeholder":"输入关键字搜索","logo":"./logo.png","favicon":"./favicon.ico"},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"anchor-navigation-ex":{"showLevel":false,"associatedWithSummary":true,"mode":"float","showGoTop":false,"printLog":false,"multipleH1":true,"float":{"floatIcon":"fa fa-navicon","showLevelIcon":false,"level1Icon":"","level2Icon":"","level3Icon":""},"pageTop":{"showLevelIcon":false,"level1Icon":"","level2Icon":"","level3Icon":""}},"back-to-top-button":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"easy_coder","pdf":{"pageBreaksBefore":"/","headerTemplate":null,"paperSize":"a4","margin":{"right":62,"left":62,"top":36,"bottom":36},"fontSize":12,"fontFamily":"Arial","footerTemplate":null,"chapterMark":"pagebreak","pageNumbers":false},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"isbn":"","variables":{},"title":"高性能服务器开发 技术专栏","links":{},"gitbook":"*","description":"","theme-default":{"showLevel":true},"extension":null},"file":{"path":"articles/游戏开发专题/1游戏服务器开发的基本体系与服务器端开发的一些建议.md","mtime":"2020-09-13T12:27:23.924Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2020-10-09T15:31:57.905Z"},"basePath":"../..","book":{"language":""}});
- });
- </script>
- </div>
-
- <script src="../../gitbook/gitbook.js"></script>
- <script src="../../gitbook/theme.js"></script>
-
-
- <script src="../../gitbook/gitbook-plugin-chapter-fold/chapter-fold.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-search-pro/jquery.mark.min.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-search-pro/search.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-back-to-top-button/plugin.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-hide-element/plugin.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-code/plugin.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-livereload/plugin.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-sharing/buttons.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
-
-
-
- <script src="../../gitbook/gitbook-plugin-theme-fexa/fexa.js"></script>
-
-
- </body>
- </html>
|