地方网

搜索

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

[复制链接]
admin 发表于 2017-11-3 06:07:57 | 显示全部楼层 |阅读模式
软件简介:
' c3 a# ~1 Z5 B6 v; z# b  v编辑注:本款游戏非一键端,但包含所有架设工具。有文字架设教程架设环境需要是linux环境。& N! u& j: }: V# H" [  I
需要一定经验才可以架设,内含苹果、安卓双客户端6 w, Z6 y4 R- w+ m
服务端客户端源码都有C++开发,需要修改字符集编码支持.
% ?0 m7 r1 d- Y) _$ S8 d0 }现在只支持中英文字符,输入也只支持中英文
  ^0 [/ y' @& }/ l  H$ I, lS2服务器部署文档2 X  Y3 P; ^$ X) P
服务器架构:. H: p0 ?- C0 ^- }2 a2 D" L
服务器种类:
( a# g; I6 e1 o; \5 \) v分为全局服务器和游戏区服务器(提示,可参照下文服务器架构图)
( l  H( U; n- {, T4 I3 q全局服务器:
; I; q( W( p$ j7 Q( V( g( W5 l每种服务器只需要一台. (对于登录服和子列表服来说, 如果压力较大,可以使用负载均衡机制部署多台)
' Z# R; Q% L+ r* ?4 o5 p全局服务器包括:- a& b1 Y' n) }
bill91server 91付费服务器, 处理支付页面(见下面的ztpay.php)发来的支付数据, 转个各个逻辑服
% ~: }* a+ D. R5 i( Cloginserver 登录服务器, 主要用于玩家登录时验证账号信息,第三方token等: t  e. A" M  Q8 Q; I( R6 \
superserver 列表服务器, 管理客户端的服务器选择界面' M8 ]; c) h5 s. d8 K3 x. F) h
Sublistserver 子列表服务器, 功能同sublistserver, 可以使用负载均衡机制开启多个子列表服来减压' u* S; }" d5 t% \
globalserver 跨服服务器, 处理一个跨服逻辑(如:跨服战, 跨服聊天)* ]# x6 q8 V9 s- _6 z7 B
ztpay.php 91付费用php页面,各个渠道支付成功后访问 的页面, 负责把订单转给billserver
" f9 Q" `1 p6 q0 F游戏区服务器:
* Y& i( M$ h' Q/ e0 J. G一组游戏区服务器支撑一个游戏区的正常运行.一组游戏区包括:2 _" P" w) ]3 Z/ z- W2 q
dbserver 数据库服务器, 数据库的前端, 逻辑服加载和保存游戏数据通过dbserver来中转, 一组游戏区有且只有一个1 `+ f2 F- j' _
gamegate 网关服务器, 客户端连接的服务器, 用于把客户端的数据转发给逻辑服, 一组游戏区可以有一到多个. ~3 X  _4 s1 I% Z! z
gameserver 游戏主逻辑服务器, 一组游戏区有且只有一个
# G2 c8 a/ j$ S8 {% }* h8 Bmanagerserver 进程管理服务器, 可以启动一个服务器组(dbserver, gameserver+若干gamegate, 监视他们的运行,发现有异常会自动重启, 一组游戏区有且只有一个% X6 ^8 U& D1 R7 d9 d
# y# W9 K  J0 t! @' w: j. O: H3 I
另有一些http服务代码后续介绍
5 B( Q5 U* ~1 `) K# b7 b4 \服务器架构图:, q5 e  \0 x( x; ?: M6 i- L9 u$ B

9 n! c: q/ |6 W$ E$ k# l+ {- u 155702fc04jjom2assccav.png % T3 j% }1 R" ~7 b
说明:7 C7 t+ D1 I8 a8 b- V
1.Client1,client2表示手机客户端先去连接sublistserver获取服务器列表,当玩家选择好服务器区后,会断开sublistserver的连接,再去连接对应服务器的网关
3 ^# S/ w/ l$ o5 u+ w9 m) X8 h2.Ztpay.php到billserver的虚线表示这个连接是个短连接, 其他的实线都是长连接
3 W7 H6 S; s  L* H; E0 j, I推荐配置
! H0 v2 A9 h' ~, }, f7 w机器环境安装:. [; y4 V' y; ~- I/ ^/ z
需要至少两台云服务器, 一个作为全局服, 另一台作为游戏服, 每新增一个游戏服,都要新增一台机器7 d; q8 e# P4 L
机器配置如下:
- X# ?9 C2 r9 }. v' b1 HCentos6.3 64位, 8 A1 @5 b# v9 f0 V/ R
8核CPU4 g  N5 A9 ~  i. D
16G 内存
; y* p+ U* D# b$ K6 d8 _500G硬盘' c: Q5 Z0 p1 V, j' v- r$ h$ E+ w4 c8 U
机器需要安装的软件见《软件安装.docx》
( B& e3 f: |- C+ Z; X& ~全局服配置:
; T  {: N, p' d数据库创建:4 ]- k! B/ C( F$ b: h# G
mysql_cmd='mysql -ppassword' (这里password改成数据库的密码)
+ ^* H% o) ?' x/ x+ e0 S) d$mysql_cmd  create_battle_field.sql% l4 e" G7 \5 ~/ q6 I
$mysql_cmd battle_field  battle_field_update.sql! u6 i* G+ w5 K: Y# m
$mysql_cmd  create_paydatabase.sql' P% Y. l. h/ p, P, M
python create_ztnet_account.py# f, B1 h6 k& \" ]: U: E3 k8 @: h
$mysql_cmd  create_ztnet_account.sql
+ m6 ^, l' I+ I, o2 ?- A$mysql_cmd  create_ztnet_account2.sql
( }/ F1 q% i: h  V) k( \; Dpython create_ztnet_account_to_userid.py# w6 Z. y/ M4 v& g6 C
$mysql_cmd  create_ztnet_account_to_userid.sql
8 b3 Y& V" o% T1 Z% t" h7 c7 k% h$mysql_cmd  create_ztnet_account_to_userid2.sql
* i7 m) a5 u# g8 {! n% d1 A4 z) _$mysql_cmd  create_ztnet_activity.sql' z! S7 p8 I( {& |( f! ?
$mysql_cmd  create_ztnet_ctupay.sql
; `! E" U4 b+ X! Q$mysql_cmd  create_ztnet_loadfail.sql( n$ y* a- [% @+ `% g' W% M
$mysql_cmd  create_ztnet_login_key.sql
9 W& y4 m& Y& z; }2 Z. N$mysql_cmd  create_ztnet_phonecard.sql! K) _. _' E3 L7 w
python create_ztnet_user.py/ T3 ~; O6 V5 v- u6 _0 _% t
$mysql_cmd  create_ztnet_user.sql' p- u; q9 j5 U/ A- c3 g! u' B
python create_ztnet_vip.py( O. D0 G, V2 A; V. v
$mysql_cmd  create_ztnet_vip.sql$ i) O9 x' P$ X( I; j: j4 G( y
$mysql_cmd paydatabase  paydatabase_update.sql
# R/ W: g! L+ {' b$mysql_cmd ztnet_activity  ztnet_activity_update.sql+ C8 v4 d' Z+ {5 L
$mysql_cmd  create_ztnet_cdkey.sql2 p8 n5 Y) J9 P  E+ w! I
$mysql_cmd ztnet_cdkey  ztnet_cdkey_udpate.sql
4 y/ S/ r  ^, d/ K修改/etc/my.cnf文件 max_connections = 100 改成max_connections = 800,重启数据库
$ Y0 t  M7 l% \# x程序和配置文件:3 P" |# Q1 I2 Y$ a; ^& T3 e
所有全局服可以部署在同一个机器的同一个文件夹下, 这里以文件夹/data/superserver为例
% H: ~) ]' l4 K6 u2 ^需要准备程序文件有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
$ \$ i! j1 r. k需要修改的配置文件有:' D) S" R# e& h, n
Server_config.lua:
; \' V" w# h( k7 d/ p. l" Pglobal_outer_ip = XXXX 后面的改成全局服的外网ip
. _, H/ ~  l. N1 \3 Z2 V$ cglobal_inner_ip = xxxx 后面改成全局服的内网ip
# O6 S2 B1 n& y# K5 i6 T% {ls_vip = global_inner_ip, 如果登录服使用负载均衡, 后面改成负载均衡的virtual_ip+ p; b6 ~, p' q$ k1 ]% b
db_password = XXXX 后面的改成数据库的密码
! l& b# \- t3 \5 TSpecific_config/sconfig.json:
: _0 K: m( K4 y( z! E/ vss_config | list_url:XXXX 后面改成GM工具的列表信息页面地址" t2 M  W! l* y& Q
防火墙:1 N8 r! w9 K9 q* ^5 R0 R
所有机器的内网应该保证都是互通的. 对于全局服的机器, 需要对外网开放的端口有:1119(superserver). 如果sublistserver不使用负载均衡,则sublistserver的端口要对外开放(默认是1120), 如果使用了负载均衡,则负载均衡的端口要对外开放
- z$ J0 W2 F7 \# H启动程序:* O* y0 j) Z* w. H! z' J
依次执行以下命令  V$ `& Q: q9 h, f* q
./back_run.sh superserver* i  T$ G; k2 U# f
sh start_login.sh - J. i+ @1 w- t& F) E/ I
sh start_sublist.sh 8 v! l: Q. g0 M8 s( b" h
./back_run.sh globalserver. \% n4 T2 T+ a. `5 n4 s
./back_run.sh bill91server$ l! E8 Z  o6 u3 U* k/ R" s
上面5个命令每次启动一种全局服, 可以每启动一种全局服后用 sh find_pid_of_this_dir.sh 查看程序进程是否成功, 全部成功后有类似以下输出:) ]7 ^6 a5 F# i
gamegate
3 M& w8 t4 L4 u0 `4 ogameserver, \( v+ D7 O  X' E1 |
dbserver. [# p! i" |/ _. `- E9 _$ h  h' g3 ?
managerserver" y( R. s! s0 f  s
superserver 8625
7 B( H0 S# t+ G2 R! floginserver 9393 9394 9395 9396 9397
4 F. C7 [* F) J- tsublistserver 10150 10151 10152 10153 10154- u; Z8 c1 p1 }9 ]. j& P& E/ M
globalserver 10234
: w) P4 c! Z# P# f0 {3 n0 |3 @' ^bill91server 18223
+ p2 q3 x! r6 {5 O& D  G* C上述显示表明,superserver,globalserver和billserver各启动了一个, loginserver和sublistserver各启动了5个+ Z2 A3 a# N  b5 V
游戏区服配置:
9 D5 T0 |+ l6 A* V数据库创建:
; N% Y2 i; Z& ]: ~$ u9 I  y2 R, `9 ?执行命令
6 R* ~' N2 V8 P9 R1 J9 T: Y8 emysql_cmd=mysql -pdb_password (db_password换成数据库密码)& D: Y) ]7 H6 ]$ M$ b
$mysql_cmd -e create database server1 default charset=utf8mb4 collate=utf8mb4_bin;5 n  k0 {# q" B$ n: N6 m3 `
$mysql_cmd -e create database serverlog1 default charset=utf8mb4 collate=utf8mb4_bin;4 ^$ P9 c0 r/ }* c' E0 w
$mysql_cmd server1  create_ztnet.sql ( O* C" e5 Z. E0 E$ _3 H
$mysql_cmd serverlog1  create_ztnetlog.sql
3 Y- b  S, I. _3 U. Z/ P$mysql_cmd server1  ztnet_update.sql
. d" z) B4 ]0 g7 E" F$mysql_cmd serverlog1  ztnetlog_update.sql ( |. F7 ^/ e5 d9 P$ C5 ~
程序和配置文件:7 G; c) H" h5 j$ c
Managerserver/dbserver/gameserver/gamegate可配置在同一目录下, 默认放在/data/gameserver/server1/下.3 |5 \/ W  u1 E$ j1 v+ @! ~
以下假定 要配置的服务器区号为zone_id1, 服务器名为server_name1
1 }  J: l" Q* [, v$ i6 m需要修改的配置文件如下:
: d% m8 K" J" W$ y% qServer_config.lua:
% c2 `# {, }, q) w1 W/ mglobal_outer_ip = XXXX 后面的改成全局服的外网ip0 {. D2 y! F; E9 S8 E0 s2 W
global_inner_ip = xxxx 后面改成全局服的内网ip4 Y& R0 r0 _  ^; D; k
ls_vip = global_inner_ip, 如果登录服使用负载均衡, 后面改成负载均衡的virtual_ip
. ?' p9 W2 w; p, Y" ?8 u0 Tdb_password = XXXX 后面的改成数据库的密码
, c/ M+ h. J9 G  uthis_outer_ip = XXXX 后面改成游戏区服的外网ip
- q9 e$ U8 s0 M$ G6 {# O  l" b  EZone_id = xxxx 后面改成zone_id19 w/ l7 e& S7 P; C
Server_name= xxxx 后面改成server_name15 R  i" ?* @9 @( Y
specific_config/server_name_and_zone.json! y1 Y6 D* B0 S. [  t- M* g
测试2: 1 改成 server_name1:zone_id12 b  P2 z3 A/ B
Specific_config/sconfig.json) s* z' A+ }* E9 M5 U8 e
里面的所有118.194.50.122均为测试环境的ip, 不修改它可以正常启动程序, 但游戏对玩家开放前一定要改成真实环境的ip
  C% n$ L- M. t; l% ]3 Wuser_picture_url_header : http://118.194.50.122/user_picture/, 游戏开放前, 要改成http://本机外网ip/user_picture
& B% I. j0 d" C8 R9 hpromotion2_update_url : http://118.194.50.122:8899/promotion/,
) f6 J/ a! V2 O! i7 M! Hpromotion3_update_url : http://118.194.50.122:8899/promotion3/, 游戏开放前, 要改成GM工具的页面地址
+ ^& u! u* m4 E; M- a
, @! z/ H& e, p9 {  o* E' kHTTP SERVICE配置
* c6 F6 q0 @0 A: p+ [# C  g" o- w全局服配置
$ v% Z2 h0 q0 r$ f; O) m) k1.首先安装apache, mod_wsgi, (这里没有安装文件, 可以使用yum等工具自行安装)
3 I0 G, [  }% q1 j2.使用python模块的安装程序如easy_install, pip等安装如下python模块:
' k7 K( P! z2 Z, F. B8 \/ LWeb.py
' z- G. H6 H0 }9 Z- E* A8 ^/ c1 r3.分别进入到cdkey_service, giant_cdkey, kuafu_rank, tencent_level_gift, user_picture_gm, zhifubao_code, zt_yimin_gm文件夹, 运行sh install.sh2 p/ a( }' d$ C5 I5 m4 C! N; s
4.全部执行完后, 执行service httpd restart8 f& B# z3 r/ Q; e. P$ d
5.执行 cp giant_pay.php /var/www/html
% t8 I% S5 o' u) D游戏区服配置2 A/ [' J% R9 D) `; H* |1 V
1.首先安装apache, mod_wsgi, (这里没有安装文件, 可以使用yum等工具自行安装)+ ]+ V9 f0 _4 b' l4 _* i8 g1 B
2.使用python模块的安装程序如easy_install, pip等安装如下python模块:
6 j) H8 P* V+ l0 \Web.py% z' V1 J$ _" }9 n% i
3.分别进入到user_picture文件夹, 运行sh install.sh+ b* ~" W" e$ e0 t2 f& k4 `
4.全部执行完后, 执行service httpd restart
: S& v$ R% ?: W) E0 `2 X" z- d
' e/ _) s3 b, H( X& C# g' Y* `  _% A6 [5 T, ^7 N
架设步骤教程
! k6 O# }! B5 W) b/ Z1 F1、操作系统为Centos6.3_64位,需要安装的包:
4 K# W* r/ w/ u% S+ K# Blua-5.1.5
* |# C/ A) }: R# r* Qcmake-2.8.7
' E5 Y3 b: G; i3 jmysql-5.5.23" n$ m& s& y9 U6 w; v6 c+ h
mysql++-3.1.0
; X4 N  ]* j9 p$ Xboost_1_49_0( r% F8 e! o5 F2 A. h
tar -xzvf lua-5.1.5.tar.gz, p0 |0 Q, W. d  v2 S. m8 ?
cd lua-5.1.5
4 j0 T' l. _9 o3 }3 O# A9 p( `然后执行make,
) T' [1 K' a$ T% `. U会提示让你输入make 系统,因为我的系统是linux的,* j( s2 b& z; I  P% O. I" p: v  m5 s
因此我输入make linux( o# r* l4 J2 I  D5 v+ o
2、编译安装boost- m4 w; A; b/ p0 R' Q& G
#tar -zxvf boost_1_49_0.tar.gz
4 D3 J4 L; @! o6 X% k6 `, w& n" @#cd boost_1_49_0
4 V+ V% Z6 @5 [  b% r3 d#./bootstrap.sh
& ^' i* E5 C# t5 [#./b2 install
5 g* w5 |; E! u* V0 @( K3、MYSQL5.5安装详细步骤:7 U  {; e, [8 G$ ?7 E( X! Q
#tar zxvf cmake-2.8.7.tar.gz -C /usr/local/src/! X: P9 ?5 Q8 c( ?
#tar zxvf mysql-5.5.23.tar.gz -C /usr/local/src/
$ q7 _6 F9 S' _# cd /usr/local/src/cmake-2.8.7/
% ~5 A( o3 m6 Z. U9 F0 p: L0 |- x# ./configure
6 ?$ |2 Z5 t$ B: l% t$ j1 {# gmake 6 e; ?  x# \  ~( _. @4 ]
# vim /etc/profile
6 c8 G* `: e0 Uexport PATH=/usr/local/mysql/bin:$PATH 添加- \% c' X+ Q2 M$ n
# . /etc/profile  q( N+ `: n  ^% \7 S2 F
启动mysql:
5 J9 f8 {: j8 S8 B- f; _/etc/init.d/mysqld start; X- l5 P5 @) o- J* C
chkconfig --add mysqld
' o0 o2 Q; y& l# a7 h7 w  \8 kchkconfig mysqld on2 Q/ x) x* b" M$ e
# mysql5 }$ k4 V# F+ c* f
mysql- F* H! D3 P, o3 }5 v% P1 Z
9、mysql++安装
6 p0 O% C/ z" y' j1 z5 O7 R6 i* W8 Htar -zxvf mysql++-3.1.0.tar.gz
5 d5 S# J: G# l5 dcd mysql++-3.1.0
8 a$ h3 n, ?8 d- q./configure
* P9 D; t  Q; _0 s# O! O$ Cmake
3 R) ~" k0 A( q5 i0 i2 r. v  g7 Kmake install
: B$ ~1 l' D2 {$ i# pwd
! ]* m% c* }: [( ]% Q8 D: C/root/mysql++-3.1.01 z. C( M+ [, p: K4 {9 g. b+ ^
#vim ssx/genv2.cpp 根据报错在这个文件中找到相应位置添加最下面那条命令0 R; S  }1 w& {
#include iostream" F9 R5 p' X0 v6 s$ j
#include fstream5 ?) N% w; g* g! T# ?: b
#include typeinfo
2 P9 J+ o( Y6 U) v7 p#include string.h4 o8 ^& u, p/ U! o
程序启动报错解决:) U; c) M% V6 a4 J. H- H8 Y
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/0 O( ]* a0 N' m. |- r
mysql select user,host,password from mysql.user;查看用户信息: T  w4 r3 n2 I5 z1 h) w7 f
+------+------------+-------------------------------------------+) k8 R  J3 V1 |4 b* \
| user | host | password |
4 h2 e1 L) x/ {2 F# j+------+------------+-------------------------------------------+
  a. z% U0 @, y. r| root | localhost | |
: Y' j+ p5 j1 A4 c7 }! Z0 i| root | 10-6-3-176 | |; \# a8 g3 F' S
| root | 127.0.0.1 | |
6 x& i3 C: Q; V4 C/ u& N* V# [| root | % | |# n+ [$ y# K" X7 X. |1 }+ p
+------+------------+-------------------------------------------+
& p* X/ M& I. l  ?' Z4 rows in set (0.00 sec)8 E& z2 b% C2 h# J5 o
mysql set password for root@localhost=password('XXXXXXX');设置root密码
2 t/ z9 i" G, o, g- Mmysql set password for root@'10-6-6-23'=password('XXXXXXXX');
: Y  p: T4 z% @mysql grant all on *.* to root@% identified by 'XXXXXXXX';授权
% S% ~5 V8 U( S/ \/ I, S# C5 Rmysql select user,host,password from mysql.user;" S" K( V8 m9 {: `# B/ a$ ]
+------+------------+-------------------------------------------+  Y3 ~3 D! ], W: K8 L
| user | host | password |4 H  |% U3 `0 D+ S5 l9 F
+------+------------+-------------------------------------------+1 l3 y! m' l/ K" ^4 a% K1 k; r$ t
| root | localhost | *C07583ABFCBBCC5D64C9469E28D4861951C5024A |
$ x) A- l* d% J# q| root | 10-6-3-176 | *C07583ABFCBBCC5D64C9469E28D4861951C5024A |
, K$ O# g% k( |' ?9 x| root | 127.0.0.1 | |
% b6 q9 R2 d- s2 C| root | % | *4F048907E92401E909B60D4C90426C4D3AEB499D |
4 K0 J0 `8 g& \+------+------------+-------------------------------------------+
8 C2 {/ C, _: b' N  q  u6 ^4 rows in set (0.00 sec)
/ \( K2 Y% q' R0 B3 Q7 s; vmysql delete from mysql.user where user='';删除匿名用户
5 M, p2 C, B) H# ~5 S# m" I5 a0 f$ Y0 P4 t- W- n7 [
mysql grant select on uctot.* to 小用户@'%' identified by XXXXXXXX;授权
* I1 r2 k1 a' n) Q# t0 x$ K" |mysql show grants for root@%;查看用户有那些权限
: W  O5 X/ d5 T0 E# S  U0 y7 f' Y" bmysql grant select on *.* to chinatot@% identified by 'XXXXXXXXX';
" |1 `% n* _' I! Emysql flush privileges;
# ^; N7 ^) [0 M! Bmysql exit- o; s$ `6 K- }( D, L
下载地址:
2017-11-3 06:07 上传
下载权限:
版本vip会员
本地下载 检测资源
有些游戏资源需要vip下载开通请点击开通vip
回复

使用道具 举报

全部回复0 显示全部楼层

发表回复

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

本版积分规则

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