地方网

搜索

[手机游戏服务端] 征程手游服务端+安卓苹果双客户端+架设教程

[复制链接]
admin 发表于 2017-11-3 06:07:57 | 显示全部楼层 |阅读模式
软件简介:
0 z( F; Y  _  @3 d/ T) O9 N编辑注:本款游戏非一键端,但包含所有架设工具。有文字架设教程架设环境需要是linux环境。
6 J3 m2 y8 Q; ~+ a* `$ `' H3 Z2 u需要一定经验才可以架设,内含苹果、安卓双客户端( }% i  K& R8 x. x
服务端客户端源码都有C++开发,需要修改字符集编码支持.( I1 U# t, b9 ?5 q. c( a- P# t
现在只支持中英文字符,输入也只支持中英文# ^: i. @3 t2 u7 r
S2服务器部署文档# N1 N9 D2 c* w
服务器架构:; b' \5 c5 z/ R5 a2 I& R
服务器种类:: W7 W/ I' O2 Y7 y/ O" r, E  ?
分为全局服务器和游戏区服务器(提示,可参照下文服务器架构图)% w5 h0 P2 g- T3 A+ x* n  R
全局服务器:# [, B# D3 j6 r; X5 t3 ~
每种服务器只需要一台. (对于登录服和子列表服来说, 如果压力较大,可以使用负载均衡机制部署多台)
1 ~2 x1 u9 Y1 q" G5 ^全局服务器包括:
. w9 c3 }9 c6 p) Obill91server 91付费服务器, 处理支付页面(见下面的ztpay.php)发来的支付数据, 转个各个逻辑服
) T2 X% C0 l. o& g5 P2 `! u; floginserver 登录服务器, 主要用于玩家登录时验证账号信息,第三方token等  `) V3 ^$ V9 ^6 L" z
superserver 列表服务器, 管理客户端的服务器选择界面
& k; h3 Q# P# @6 VSublistserver 子列表服务器, 功能同sublistserver, 可以使用负载均衡机制开启多个子列表服来减压' R' A# g( {3 K5 y/ [) g
globalserver 跨服服务器, 处理一个跨服逻辑(如:跨服战, 跨服聊天)
" D* N2 H2 g" h( Q0 m4 J" P0 r# cztpay.php 91付费用php页面,各个渠道支付成功后访问 的页面, 负责把订单转给billserver( o1 F4 P' j0 Q6 I8 p
游戏区服务器:- s% p0 p( l( V
一组游戏区服务器支撑一个游戏区的正常运行.一组游戏区包括:& o0 M5 f/ ?$ p- |
dbserver 数据库服务器, 数据库的前端, 逻辑服加载和保存游戏数据通过dbserver来中转, 一组游戏区有且只有一个/ {! e6 [) p4 U: O- H
gamegate 网关服务器, 客户端连接的服务器, 用于把客户端的数据转发给逻辑服, 一组游戏区可以有一到多个
1 v9 o' k# z9 @* J: m& T& t% }3 bgameserver 游戏主逻辑服务器, 一组游戏区有且只有一个
% s! q- H5 K, ~* a8 E6 U# umanagerserver 进程管理服务器, 可以启动一个服务器组(dbserver, gameserver+若干gamegate, 监视他们的运行,发现有异常会自动重启, 一组游戏区有且只有一个
1 y$ {8 P& |1 E. v) y, D- S. B! T! b7 i0 A0 A
另有一些http服务代码后续介绍
2 M$ s3 L" Q* a7 C6 H5 L/ c8 g服务器架构图:( g/ `/ b" @* [& i$ T7 T
. m8 N  j5 o  q& c  j
155702fc04jjom2assccav.png
* Q6 A% G# t4 f# Y说明:7 s, X3 Z# U1 s% _; @) C
1.Client1,client2表示手机客户端先去连接sublistserver获取服务器列表,当玩家选择好服务器区后,会断开sublistserver的连接,再去连接对应服务器的网关" x# d# N. k. r& M$ \6 B
2.Ztpay.php到billserver的虚线表示这个连接是个短连接, 其他的实线都是长连接
& ?' R. Z' X, Z1 p7 i# _推荐配置
4 C! T" X$ h* G8 x7 G机器环境安装:
$ |  r- H# ]+ V! U( A$ c* J, C需要至少两台云服务器, 一个作为全局服, 另一台作为游戏服, 每新增一个游戏服,都要新增一台机器! Z/ x: |$ N4 X* t- g
机器配置如下:
0 J3 X  q0 C: z/ J- Z! \- f' ]) bCentos6.3 64位, ! V8 _, Z9 o1 s3 N
8核CPU8 E7 _$ M* n8 z$ r; v
16G 内存
  S. t; I1 g# k1 u500G硬盘) V5 ?  _8 z$ J' t& @
机器需要安装的软件见《软件安装.docx》- o7 n  r4 z& S' S
全局服配置:$ S/ s2 M4 Y' t4 Z; _/ H2 A
数据库创建:
3 P& n. `8 Q6 Y2 p7 Gmysql_cmd='mysql -ppassword' (这里password改成数据库的密码)
6 C* w+ n& N3 k$mysql_cmd  create_battle_field.sql
7 w. m5 @- @/ n+ N% ^! T$mysql_cmd battle_field  battle_field_update.sql* t3 e# `# V. z" V
$mysql_cmd  create_paydatabase.sql
  Q; k0 h+ f2 y% O% J7 }python create_ztnet_account.py5 \" _3 Z& `* b$ f3 N
$mysql_cmd  create_ztnet_account.sql- @! }) Z. e+ C* _; {5 [% l/ f8 [
$mysql_cmd  create_ztnet_account2.sql+ u/ s! }$ W6 t0 D( S8 v8 |
python create_ztnet_account_to_userid.py
0 t* D, @" v+ A7 A, }. v* o/ |9 L$mysql_cmd  create_ztnet_account_to_userid.sql
% E- n& L2 w; i$ Z4 K$ h  B! Q$mysql_cmd  create_ztnet_account_to_userid2.sql
/ b2 g  v8 ], D) u+ W$mysql_cmd  create_ztnet_activity.sql2 e1 E% R3 V% L
$mysql_cmd  create_ztnet_ctupay.sql" s- C& T  Y9 e2 T% M
$mysql_cmd  create_ztnet_loadfail.sql& u* W" m, t4 O2 ?5 r3 u4 r* L
$mysql_cmd  create_ztnet_login_key.sql
' M3 J8 s" Z6 _6 q& P$mysql_cmd  create_ztnet_phonecard.sql1 l9 T$ Y0 u; _
python create_ztnet_user.py
, e" P' t1 P: f# X- g$mysql_cmd  create_ztnet_user.sql; Q, N* L/ D8 L& i+ R
python create_ztnet_vip.py. b0 X$ K! }- T9 b
$mysql_cmd  create_ztnet_vip.sql0 g, X3 b  s6 u) ~  e
$mysql_cmd paydatabase  paydatabase_update.sql* Z" b: |7 m  i$ z# z( Y
$mysql_cmd ztnet_activity  ztnet_activity_update.sql
% K$ X% _2 d! j) m0 d- X9 A$mysql_cmd  create_ztnet_cdkey.sql! i% ^, ^1 ?- E- P  r$ A' M) X
$mysql_cmd ztnet_cdkey  ztnet_cdkey_udpate.sql$ Q, _6 J- u0 O/ N+ i
修改/etc/my.cnf文件 max_connections = 100 改成max_connections = 800,重启数据库
$ s. o) ~, z& Q' Q* C9 m. K( N( n程序和配置文件:, z  Z) I/ V1 ]) f# @
所有全局服可以部署在同一个机器的同一个文件夹下, 这里以文件夹/data/superserver为例- N) T# Z- R: [; W' H" m0 K
需要准备程序文件有globalserver/superserver/loginserver/sublistserver/billserver, 配置文件有server_config.lua ss_config.lua male.txt female.txt LuaScript/BattleField.lua LuaScript/globaldefine.lua find_pid_of_this_dir.sh, e* h7 Q0 x, a
需要修改的配置文件有:
! w: |. P/ M: g) @7 S1 d2 oServer_config.lua:
8 U. l: J$ ^' P. x( k) i6 ~global_outer_ip = XXXX 后面的改成全局服的外网ip
4 x3 k' k  d. }3 wglobal_inner_ip = xxxx 后面改成全局服的内网ip) E  M* H6 H4 C2 R0 `$ H
ls_vip = global_inner_ip, 如果登录服使用负载均衡, 后面改成负载均衡的virtual_ip5 Q+ v1 K! G' R' u' s/ l4 Z
db_password = XXXX 后面的改成数据库的密码8 [% E2 i5 g( d1 n  j
Specific_config/sconfig.json:% \" Z9 Q8 G. y" s# Z
ss_config | list_url:XXXX 后面改成GM工具的列表信息页面地址: N2 T$ q' L" d* F' i# J% a
防火墙:
6 S( v( u0 b9 P% H8 S所有机器的内网应该保证都是互通的. 对于全局服的机器, 需要对外网开放的端口有:1119(superserver). 如果sublistserver不使用负载均衡,则sublistserver的端口要对外开放(默认是1120), 如果使用了负载均衡,则负载均衡的端口要对外开放; O- n" M; Y5 q9 }6 e% I( M
启动程序:. b1 ?* c0 v4 a9 H, J- U  d
依次执行以下命令
+ l, U5 g( ~6 u/ g9 ^; Q8 c./back_run.sh superserver3 q5 U# H& e7 F+ }  j3 C
sh start_login.sh
9 i, Q# K) N6 ^) Jsh start_sublist.sh
' v+ ^  q8 s0 p3 C  m9 r./back_run.sh globalserver) K/ `8 O, K$ M+ N
./back_run.sh bill91server' ^  R- z& H$ {# n; A
上面5个命令每次启动一种全局服, 可以每启动一种全局服后用 sh find_pid_of_this_dir.sh 查看程序进程是否成功, 全部成功后有类似以下输出:+ J# ~9 y2 B! ]
gamegate
! x7 P* T" }& fgameserver3 @5 J( `3 R9 u+ T/ S
dbserver
3 m: ^9 |+ ^* umanagerserver/ b* W# y+ r1 Q6 y
superserver 8625! @# C; K; O1 o' j8 Y
loginserver 9393 9394 9395 9396 9397
8 x- v  I) j7 K$ ?# k# R/ k' I1 Z  b/ Nsublistserver 10150 10151 10152 10153 10154! i! ]% D  l: ]8 `8 E9 Y
globalserver 10234
  M/ W! L5 H$ U5 |) G$ zbill91server 18223, O9 n/ X; i3 E2 H
上述显示表明,superserver,globalserver和billserver各启动了一个, loginserver和sublistserver各启动了5个/ t1 T+ @9 Z7 O3 v8 O
游戏区服配置:
) Q" a  s" o) A$ t: L数据库创建:" J, F1 d% Y, W: W# s8 _6 Z5 |
执行命令5 N5 A& `3 }$ @$ g7 M
mysql_cmd=mysql -pdb_password (db_password换成数据库密码)
' A% g1 G8 K% Q7 ^$mysql_cmd -e create database server1 default charset=utf8mb4 collate=utf8mb4_bin;# N$ H) |0 W9 ]. B  P- Z
$mysql_cmd -e create database serverlog1 default charset=utf8mb4 collate=utf8mb4_bin;* E/ O- V8 D+ \/ i/ i% b* D
$mysql_cmd server1  create_ztnet.sql 0 O$ G" R9 X3 o0 U% u
$mysql_cmd serverlog1  create_ztnetlog.sql ( `: _" u$ K! C' v8 L. V% i3 P* A$ d
$mysql_cmd server1  ztnet_update.sql
* U+ d0 G* e, h3 \+ o4 v, r2 ?$mysql_cmd serverlog1  ztnetlog_update.sql
- N  ?( a  d9 G# n6 E: j程序和配置文件:
  o  R1 `& v: Z9 C  u; _Managerserver/dbserver/gameserver/gamegate可配置在同一目录下, 默认放在/data/gameserver/server1/下., T/ H$ B2 C8 L, _
以下假定 要配置的服务器区号为zone_id1, 服务器名为server_name1& S7 E( M/ u2 z* d  F/ W
需要修改的配置文件如下:
& C& ^# M6 t+ T; Y% @/ q+ X5 Z6 MServer_config.lua:
  }3 b  G2 v* m$ ]* c+ |* j8 g6 rglobal_outer_ip = XXXX 后面的改成全局服的外网ip4 f7 a1 |" C: J' i7 a; i  h0 X
global_inner_ip = xxxx 后面改成全局服的内网ip, \7 O) k- E  T9 I+ T" z" }
ls_vip = global_inner_ip, 如果登录服使用负载均衡, 后面改成负载均衡的virtual_ip
5 s( |! a3 o9 Jdb_password = XXXX 后面的改成数据库的密码- d4 c2 R, C" c. D
this_outer_ip = XXXX 后面改成游戏区服的外网ip% C1 d9 G9 s$ y
Zone_id = xxxx 后面改成zone_id1' i/ }) n$ T& s! {* \% o
Server_name= xxxx 后面改成server_name1! F! k9 s& _0 {$ g# F
specific_config/server_name_and_zone.json) L& B2 N2 n# J$ B! t/ a
测试2: 1 改成 server_name1:zone_id1
7 k( e$ p& i/ u( L$ K, |Specific_config/sconfig.json
9 R0 t! Z) v( T) g  o* h+ d里面的所有118.194.50.122均为测试环境的ip, 不修改它可以正常启动程序, 但游戏对玩家开放前一定要改成真实环境的ip# x9 P1 ]/ E9 p8 U
user_picture_url_header : http://118.194.50.122/user_picture/, 游戏开放前, 要改成http://本机外网ip/user_picture& Z( S, K( e  Z
promotion2_update_url : http://118.194.50.122:8899/promotion/,
, i3 z" \5 ]* B/ `promotion3_update_url : http://118.194.50.122:8899/promotion3/, 游戏开放前, 要改成GM工具的页面地址9 i$ L9 V+ t' b* f- W0 Z& a- ]1 R

5 }2 Y) V5 ~- f" V; rHTTP SERVICE配置
% [) U# g- p8 }! S# t% S全局服配置
5 d% S( Q! }  S* q( G1.首先安装apache, mod_wsgi, (这里没有安装文件, 可以使用yum等工具自行安装)
5 w; z% H3 W( ^6 Y* x1 b% B2.使用python模块的安装程序如easy_install, pip等安装如下python模块:7 G+ ?" g$ W: V( W' o
Web.py; r: t( l3 Q; h. Z% n
3.分别进入到cdkey_service, giant_cdkey, kuafu_rank, tencent_level_gift, user_picture_gm, zhifubao_code, zt_yimin_gm文件夹, 运行sh install.sh. \. |# o8 F3 K: o6 F5 [2 m3 ]4 J
4.全部执行完后, 执行service httpd restart; ]0 t, M+ v4 i3 \  k
5.执行 cp giant_pay.php /var/www/html
2 B+ D, ]8 D' T0 T游戏区服配置
" Z- p7 f' H$ S: h8 F1.首先安装apache, mod_wsgi, (这里没有安装文件, 可以使用yum等工具自行安装)
; `3 e- `* u: D4 u* w8 s2.使用python模块的安装程序如easy_install, pip等安装如下python模块:
+ H* z3 M+ x! SWeb.py
* i5 ?: |  M% A- ^- \9 M8 j3.分别进入到user_picture文件夹, 运行sh install.sh
" ]' H' k' R' O* F% i3 o. Y9 x* @/ _; v4.全部执行完后, 执行service httpd restart8 W, _% \( t* h8 m3 d
/ y! E9 b; z2 _2 }& D( G" F; k

1 \* d" k# a2 X+ R$ g# Y( U/ f架设步骤教程
% p# N* E- W: i0 x) E) ~1、操作系统为Centos6.3_64位,需要安装的包:
# k$ r( L9 x- \& W0 k& Jlua-5.1.5
8 F' a, F* g. {2 n) V& Tcmake-2.8.7
; i2 Q+ Q0 {* {) j7 ~) L' smysql-5.5.23
4 B( F1 |7 A2 S9 Z3 Vmysql++-3.1.0
3 }4 O) ?5 j4 f* s4 O% uboost_1_49_0
  g0 t  p) K4 U( ~tar -xzvf lua-5.1.5.tar.gz! B" L& a( o+ m9 E/ Z7 P
cd lua-5.1.5
# |0 }8 @# @& f然后执行make,
4 S6 a* \7 w6 Y- l! w会提示让你输入make 系统,因为我的系统是linux的,# L" b% c8 ~' P" {+ c
因此我输入make linux
- Q7 D: j4 K: p8 K# F6 }6 P0 i8 x2、编译安装boost
: E  q4 Q' Z+ M, v+ F% [' x#tar -zxvf boost_1_49_0.tar.gz
, g/ w: H7 Z. J  V6 c7 D7 e: N$ }#cd boost_1_49_0. l9 s6 F4 o  _1 q2 A
#./bootstrap.sh
+ T* E' w, O& g! q; m4 d#./b2 install# C& Z7 _, {* U- H, B
3、MYSQL5.5安装详细步骤:1 B* b; S( s) n7 r3 w
#tar zxvf cmake-2.8.7.tar.gz -C /usr/local/src/6 b, F* f1 G- q" i8 B
#tar zxvf mysql-5.5.23.tar.gz -C /usr/local/src/
$ t' y' m5 a/ q# cd /usr/local/src/cmake-2.8.7/$ ], C. Q' W( k4 n3 |
# ./configure 3 Q5 S- [3 O! x: ?9 K6 m% o* X- F6 J
# gmake
9 s, U0 ?. u# D# W  G# vim /etc/profile
2 m/ H* }% x" Nexport PATH=/usr/local/mysql/bin:$PATH 添加
0 D7 J9 `$ V3 p* G# . /etc/profile3 J9 G+ l# T: t: A  p, o& ^. I
启动mysql:
8 k, u6 i/ P; U+ n. @8 f2 E/etc/init.d/mysqld start' N4 ^. ~% j& u
chkconfig --add mysqld8 m) d1 t5 S# J. f
chkconfig mysqld on
( |+ ~' w# w: S6 l. \8 \) A0 b1 h, K# mysql+ T: o6 C+ w: T+ `% ^
mysql8 j. R* L- r. v! i
9、mysql++安装
" r$ Z) W+ E! i5 Xtar -zxvf mysql++-3.1.0.tar.gz5 a* n% \8 `1 O5 O* z
cd mysql++-3.1.0
, U) k; [( {- U: l./configure3 s; O! I" G8 c
make7 F; ?4 M+ e2 b" f( _9 T
make install2 y+ G/ U4 _( ]4 k6 n
# pwd, l0 ?" W3 e+ f$ `/ {- t, N( {
/root/mysql++-3.1.0
( d  }+ D! }3 j4 Q8 Q6 M) y# p5 B$ t#vim ssx/genv2.cpp 根据报错在这个文件中找到相应位置添加最下面那条命令- R! l, {  U: X! o- V5 d
#include iostream+ {: v8 f" c2 @8 `7 S/ e- x0 @8 Y4 F
#include fstream6 g, n/ h: q% x" H
#include typeinfo; L& E- P2 T& [( Y
#include string.h
9 m, X8 R: O- L" N' [程序启动报错解决:
& W2 i4 U0 ~- o  g6 b# O1 }ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/4 J4 P" V1 [& z2 G
mysql select user,host,password from mysql.user;查看用户信息  w0 f( q, l2 |/ M: m$ ]
+------+------------+-------------------------------------------+. v, W3 j3 @5 \: Z/ n# U9 l9 q
| user | host | password |
% B% m% s$ M, w+ w( `& o+------+------------+-------------------------------------------+
) ?1 A% G* Q! d( k| root | localhost | |
1 {2 P3 E" R" [/ R( }3 g| root | 10-6-3-176 | |
' p* f( q/ H! V5 l) }| root | 127.0.0.1 | |2 i1 R  Q* ]: |$ S' N
| root | % | |
+ [+ y1 _/ o& I/ _  n6 w) r$ s+------+------------+-------------------------------------------+6 q- C; c' H; g# c7 l
4 rows in set (0.00 sec)
9 a3 U% L9 w: Q& d- O8 Fmysql set password for root@localhost=password('XXXXXXX');设置root密码+ m( M2 i" q4 f" A. K$ p; Q5 G8 J
mysql set password for root@'10-6-6-23'=password('XXXXXXXX');5 ^; K' A& O) R5 l
mysql grant all on *.* to root@% identified by 'XXXXXXXX';授权
3 H! I- B; W" i4 T( d) Xmysql select user,host,password from mysql.user;
2 D" C: @7 j8 W3 H, B# N2 }8 J$ X+------+------------+-------------------------------------------+
; {( k$ X! e- E$ h| user | host | password |( r5 U/ P( n, p# J/ b0 C3 G
+------+------------+-------------------------------------------+
1 S. }; ?: v$ Y! R9 k| root | localhost | *C07583ABFCBBCC5D64C9469E28D4861951C5024A |/ D1 y& g, W3 M- Y+ K% o0 s; o
| root | 10-6-3-176 | *C07583ABFCBBCC5D64C9469E28D4861951C5024A |
& [. f- U( m- m/ V8 ~| root | 127.0.0.1 | |
) r8 M; a1 j" g$ q' @  j# S2 p| root | % | *4F048907E92401E909B60D4C90426C4D3AEB499D |
$ @# }2 A/ D) [. `+------+------------+-------------------------------------------+
9 K: l. A2 A1 I8 d: c4 rows in set (0.00 sec)  N' w0 J* ]1 q) ^& \5 v% @3 y
mysql delete from mysql.user where user='';删除匿名用户& g! @6 \1 a: a7 T2 ^& F
! T& h. i# F4 Q
mysql grant select on uctot.* to 小用户@'%' identified by XXXXXXXX;授权/ G* J; E/ r* ^) ~3 S* E) m% \+ V
mysql show grants for root@%;查看用户有那些权限
- U, s' y2 w# J* A' N. f7 k: Amysql grant select on *.* to chinatot@% identified by 'XXXXXXXXX';
3 L2 f/ \# N' Z- V) j, L3 ]7 X) E" V% amysql flush privileges;9 w/ Z7 h( v7 {6 i2 h
mysql exit
( Q; N, f# t/ i0 f下载地址:
2017-11-3 06:07 上传
下载权限:
版本vip会员
本地下载 检测资源   提取码: 需要终身vip或更高权限
有些游戏资源需要vip下载开通请点击开通vip
回复

使用道具 举报

全部回复0 显示全部楼层

发表回复

您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表