地方网

搜索

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

[复制链接]
admin 发表于 2017-11-3 06:07:57 | 显示全部楼层 |阅读模式
软件简介:' @9 f' u6 b" z! I5 C: L
编辑注:本款游戏非一键端,但包含所有架设工具。有文字架设教程架设环境需要是linux环境。/ t8 \( d* c0 P
需要一定经验才可以架设,内含苹果、安卓双客户端
  M1 e! i0 r; p9 v; f, ?4 v服务端客户端源码都有C++开发,需要修改字符集编码支持.
$ i5 Z* M$ J& x( h. A4 y现在只支持中英文字符,输入也只支持中英文$ q! k" h5 q2 X! m% j( b' H# ?
S2服务器部署文档2 {7 `) h) n* W' T& T
服务器架构:0 e9 r( ?4 Y* b" h. a
服务器种类:
! t" ?1 x1 S) ^7 g  S1 A0 n分为全局服务器和游戏区服务器(提示,可参照下文服务器架构图)
5 z/ p  A% ]: q- w3 n: `全局服务器:
' v% p0 B( Y4 J* m; c! C* f3 d; S每种服务器只需要一台. (对于登录服和子列表服来说, 如果压力较大,可以使用负载均衡机制部署多台)
2 Z6 A& T/ T+ @: T* B% x0 L全局服务器包括:: }' S, V( ?; ?& T
bill91server 91付费服务器, 处理支付页面(见下面的ztpay.php)发来的支付数据, 转个各个逻辑服& Q7 D8 P4 q% i" T2 y
loginserver 登录服务器, 主要用于玩家登录时验证账号信息,第三方token等
+ R# V# h5 v$ Q$ A7 k7 osuperserver 列表服务器, 管理客户端的服务器选择界面5 t, T5 q: S& K
Sublistserver 子列表服务器, 功能同sublistserver, 可以使用负载均衡机制开启多个子列表服来减压+ Q  k2 b4 }9 K
globalserver 跨服服务器, 处理一个跨服逻辑(如:跨服战, 跨服聊天)
6 c4 \) Q$ A$ S" d5 ?ztpay.php 91付费用php页面,各个渠道支付成功后访问 的页面, 负责把订单转给billserver1 U$ u+ O( E0 h% x9 t& }) V* o( O
游戏区服务器:
- C2 ~. F6 s4 T( f7 x5 W一组游戏区服务器支撑一个游戏区的正常运行.一组游戏区包括:* w: Y" t; D4 K7 ]+ O
dbserver 数据库服务器, 数据库的前端, 逻辑服加载和保存游戏数据通过dbserver来中转, 一组游戏区有且只有一个
1 U, z: m3 o; q2 U7 S6 ?* kgamegate 网关服务器, 客户端连接的服务器, 用于把客户端的数据转发给逻辑服, 一组游戏区可以有一到多个
  y6 Z3 y' p' {. [5 Q" Ngameserver 游戏主逻辑服务器, 一组游戏区有且只有一个
+ e, ^) {0 s  D; f1 hmanagerserver 进程管理服务器, 可以启动一个服务器组(dbserver, gameserver+若干gamegate, 监视他们的运行,发现有异常会自动重启, 一组游戏区有且只有一个" X) r; L+ z5 U1 D

4 h( S/ e+ n: y/ @. Z另有一些http服务代码后续介绍% ], l8 D5 x0 \5 j- V
服务器架构图:) p1 O# E1 b. _3 P
4 Y9 X3 e. L  O6 b7 k, F
155702fc04jjom2assccav.png
; Y8 Y: c/ k2 o说明:- T; [. q  m) E- @- P
1.Client1,client2表示手机客户端先去连接sublistserver获取服务器列表,当玩家选择好服务器区后,会断开sublistserver的连接,再去连接对应服务器的网关9 d" \' }3 V' b' e
2.Ztpay.php到billserver的虚线表示这个连接是个短连接, 其他的实线都是长连接3 u% J/ z+ z- A' g
推荐配置# [, p6 e6 g( }$ M
机器环境安装:% i% F; [6 @# h2 W" y; o9 _
需要至少两台云服务器, 一个作为全局服, 另一台作为游戏服, 每新增一个游戏服,都要新增一台机器
; o) t" @- l( B' _1 E7 D" Q机器配置如下:
) }1 d: o& B' K' NCentos6.3 64位, 0 D# c/ t/ t8 F! [$ m3 v
8核CPU
1 a- o- |+ a; m16G 内存
. _* D9 C7 V7 w6 p4 n500G硬盘- e$ h' w# ~- F2 u
机器需要安装的软件见《软件安装.docx》
( p  g- ]- Y% @1 V) _7 u! ^全局服配置:! v4 Y: s( D# l5 R) ?0 ]% N- H
数据库创建:  A8 l4 V9 v/ M+ a7 o
mysql_cmd='mysql -ppassword' (这里password改成数据库的密码)
$ P: p5 ^: J9 |0 w# a, O$mysql_cmd  create_battle_field.sql
3 n: J6 n; D" w$mysql_cmd battle_field  battle_field_update.sql5 k1 \5 a# H+ i5 \9 |
$mysql_cmd  create_paydatabase.sql
/ l* r+ o) W3 X. Mpython create_ztnet_account.py
" w5 J  T( d4 [3 ?( P$mysql_cmd  create_ztnet_account.sql1 F9 J" G8 V, g: ^1 ]! K; t
$mysql_cmd  create_ztnet_account2.sql
. e' X. g0 F( O2 `3 npython create_ztnet_account_to_userid.py
5 c5 w0 S9 k1 x7 _3 f1 I$mysql_cmd  create_ztnet_account_to_userid.sql
$ O  P/ \  Y( f$ g0 E, g% w$mysql_cmd  create_ztnet_account_to_userid2.sql- ^, @& `' l4 p7 Q! z, S
$mysql_cmd  create_ztnet_activity.sql
3 l# {  T! S2 y" c' e& b5 r/ T$mysql_cmd  create_ztnet_ctupay.sql: U8 b6 Y1 n  C8 v
$mysql_cmd  create_ztnet_loadfail.sql' p# C+ r$ R2 `4 ~+ h& e8 C
$mysql_cmd  create_ztnet_login_key.sql: X' \# o' @9 S% V8 W9 F& [& X
$mysql_cmd  create_ztnet_phonecard.sql$ v3 E1 U5 g3 H/ E
python create_ztnet_user.py$ P& }0 Y0 q6 P' C% t( g
$mysql_cmd  create_ztnet_user.sql
2 Z" i1 Y. X( O# b. U# y+ a. gpython create_ztnet_vip.py
) g: Q. u* @- R. q$mysql_cmd  create_ztnet_vip.sql: g: O$ ?. B, ?2 ^
$mysql_cmd paydatabase  paydatabase_update.sql6 _$ [+ [* t7 U1 S, a, F
$mysql_cmd ztnet_activity  ztnet_activity_update.sql6 F: V; n, k. h* f$ T
$mysql_cmd  create_ztnet_cdkey.sql
" C1 C4 w" d1 O& V$mysql_cmd ztnet_cdkey  ztnet_cdkey_udpate.sql7 n) }) t5 ^8 |6 [
修改/etc/my.cnf文件 max_connections = 100 改成max_connections = 800,重启数据库
) [+ J* _+ I% ]6 D! N, l程序和配置文件:, a* m; X: X( y* Y7 E
所有全局服可以部署在同一个机器的同一个文件夹下, 这里以文件夹/data/superserver为例
) S2 x; o& [6 N% B5 R需要准备程序文件有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
+ Q7 S9 {9 z( O) b  y: w7 T需要修改的配置文件有:
0 f8 o  G. `( S$ s' yServer_config.lua:3 D) o+ c. U3 D* L
global_outer_ip = XXXX 后面的改成全局服的外网ip  U! O8 m" H' B6 p6 @
global_inner_ip = xxxx 后面改成全局服的内网ip
$ d9 L. d+ L: Y& x6 xls_vip = global_inner_ip, 如果登录服使用负载均衡, 后面改成负载均衡的virtual_ip2 g" k! y* [( s4 }/ C# y& X  I% L8 `
db_password = XXXX 后面的改成数据库的密码9 ~$ a9 L/ k" c6 e- J" C
Specific_config/sconfig.json:) |+ w& j4 [+ U  R2 A4 z4 N; }
ss_config | list_url:XXXX 后面改成GM工具的列表信息页面地址* m; ^6 A- _* D" m
防火墙:0 J' q* t+ S* J+ c; h0 j
所有机器的内网应该保证都是互通的. 对于全局服的机器, 需要对外网开放的端口有:1119(superserver). 如果sublistserver不使用负载均衡,则sublistserver的端口要对外开放(默认是1120), 如果使用了负载均衡,则负载均衡的端口要对外开放) l% w7 k6 A# F9 f: I
启动程序:  [! V. d% W& x6 D
依次执行以下命令0 t  Z2 R' d0 U9 O7 E, l4 \
./back_run.sh superserver7 G' f8 _# [% h. b& b( |* y( R. m
sh start_login.sh
. ^0 o$ \5 F: N3 q* J4 Rsh start_sublist.sh
! f. M4 Y8 H9 m; y./back_run.sh globalserver0 N, r' n. g+ C
./back_run.sh bill91server
3 j8 U9 e/ ]* I# F# H4 {; N" e上面5个命令每次启动一种全局服, 可以每启动一种全局服后用 sh find_pid_of_this_dir.sh 查看程序进程是否成功, 全部成功后有类似以下输出:
, y8 e% z/ \, @$ igamegate( [5 j2 [+ _( q; i. F4 w, ]3 N2 W
gameserver5 P1 C2 I& s% a# S3 n: s9 e" I
dbserver
1 o* W$ D% ^- `9 B! b8 Zmanagerserver
; m) x9 G" g6 S, ?superserver 8625/ Y8 \* [! O, z* D7 S9 W* x
loginserver 9393 9394 9395 9396 9397
% L% x$ ]; g0 Q% Z. [. B' \) o5 M/ }) msublistserver 10150 10151 10152 10153 10154
) l& d" @+ w% dglobalserver 10234! G3 \# T/ z6 p) \
bill91server 18223
4 h+ c- T& W# O) @8 F. r# K. f: v& j/ ?上述显示表明,superserver,globalserver和billserver各启动了一个, loginserver和sublistserver各启动了5个: i  i9 J- M9 T( W
游戏区服配置:- {3 H" b7 ]4 W5 j) l
数据库创建:# B) ]& }3 Y* n1 _
执行命令
- s+ {/ P+ ~7 k* `5 R9 |mysql_cmd=mysql -pdb_password (db_password换成数据库密码)
; U, m0 B0 O9 S+ b0 s. C0 s  _+ A$mysql_cmd -e create database server1 default charset=utf8mb4 collate=utf8mb4_bin;
: }" q5 r& {( O4 s) ~$mysql_cmd -e create database serverlog1 default charset=utf8mb4 collate=utf8mb4_bin;. L6 m  u  l7 Y8 S2 X+ ?5 a$ ^
$mysql_cmd server1  create_ztnet.sql
. p7 K. m5 F  h$ x2 `! @$mysql_cmd serverlog1  create_ztnetlog.sql 8 Y/ r' B6 V8 i( e4 s9 Z7 r
$mysql_cmd server1  ztnet_update.sql
6 F5 O# _1 @2 y$mysql_cmd serverlog1  ztnetlog_update.sql ( Z( m! f7 W& Y' K1 m
程序和配置文件:
$ @' L6 ^2 R) ^' d: |1 I' dManagerserver/dbserver/gameserver/gamegate可配置在同一目录下, 默认放在/data/gameserver/server1/下.5 D5 L" C% u$ H: B* W7 o
以下假定 要配置的服务器区号为zone_id1, 服务器名为server_name1, [9 d; q; H' [! x& Q0 z
需要修改的配置文件如下:. Z0 J" e/ y+ X. N5 x& S
Server_config.lua:1 A( v) @- ?9 a8 Q
global_outer_ip = XXXX 后面的改成全局服的外网ip- L+ s6 \! Z, Z' i( o. t6 p
global_inner_ip = xxxx 后面改成全局服的内网ip
' d4 \9 n0 C/ `7 _! X1 S" W$ |6 xls_vip = global_inner_ip, 如果登录服使用负载均衡, 后面改成负载均衡的virtual_ip
! W: ~" G  r& Mdb_password = XXXX 后面的改成数据库的密码% R, N! v. ^* k; F  F" x) }
this_outer_ip = XXXX 后面改成游戏区服的外网ip
8 V  @0 S5 s# n& \  GZone_id = xxxx 后面改成zone_id1
% o  u* g( d) K$ }, yServer_name= xxxx 后面改成server_name1
- E7 H% T6 a+ i+ @specific_config/server_name_and_zone.json& N: p1 p2 t3 s+ g4 L
测试2: 1 改成 server_name1:zone_id1
- H+ {6 `: E7 |& U/ W& C9 s" xSpecific_config/sconfig.json
) l+ p" t! H6 [% C/ W6 i' c里面的所有118.194.50.122均为测试环境的ip, 不修改它可以正常启动程序, 但游戏对玩家开放前一定要改成真实环境的ip# W- }& X  J+ L( F3 H
user_picture_url_header : http://118.194.50.122/user_picture/, 游戏开放前, 要改成http://本机外网ip/user_picture
4 s: X0 b) ~; X6 T  Z- Wpromotion2_update_url : http://118.194.50.122:8899/promotion/,  T; s: d3 @# T
promotion3_update_url : http://118.194.50.122:8899/promotion3/, 游戏开放前, 要改成GM工具的页面地址! R; {! q  l) o: B' H4 t' V

1 L- j$ m! ]9 y" z5 k! f( G2 FHTTP SERVICE配置; R8 b4 g; z( Z$ c% v
全局服配置2 P, v' c/ D% j% c
1.首先安装apache, mod_wsgi, (这里没有安装文件, 可以使用yum等工具自行安装)3 X/ v$ `1 C8 I4 B3 Y
2.使用python模块的安装程序如easy_install, pip等安装如下python模块:; o( }' d6 }( p( S2 I/ y* ~7 C
Web.py
" H# _" b; h  Q. B9 A+ N3.分别进入到cdkey_service, giant_cdkey, kuafu_rank, tencent_level_gift, user_picture_gm, zhifubao_code, zt_yimin_gm文件夹, 运行sh install.sh" S8 [8 L7 O+ ^4 Z- C9 G' a  i. r+ J
4.全部执行完后, 执行service httpd restart
+ w. X  c) R0 l5.执行 cp giant_pay.php /var/www/html
! q% p9 L8 R8 {4 d! s游戏区服配置
- r" u1 L  ~1 n% N1 K1.首先安装apache, mod_wsgi, (这里没有安装文件, 可以使用yum等工具自行安装)0 }2 M1 }/ }( y6 a  h5 U
2.使用python模块的安装程序如easy_install, pip等安装如下python模块:
. ?; g2 y$ K( h: E- C$ a& U. PWeb.py: w& K7 L, l* z5 d
3.分别进入到user_picture文件夹, 运行sh install.sh) y8 K) |& h5 M+ V  B9 T" c
4.全部执行完后, 执行service httpd restart
' D; E0 v+ G! [6 Y$ D, D) l% J0 M9 A2 y, x& O/ p" o* r1 {

& |" k% _6 R; Q( \9 b  Z架设步骤教程+ Q# ~' n  r" _8 `% A1 A; a; v
1、操作系统为Centos6.3_64位,需要安装的包:
! d# _2 w* o/ {% R% \! wlua-5.1.5
- }% c4 i5 k  E- ccmake-2.8.78 p* e$ w$ _$ `4 R/ Q2 @
mysql-5.5.23* f/ R+ @' i7 C6 Q& S8 h
mysql++-3.1.01 e9 c) L. ^$ u+ R. O
boost_1_49_0- h4 ^- N: Z/ X& a- d1 p7 [
tar -xzvf lua-5.1.5.tar.gz
+ v6 t4 S# O' lcd lua-5.1.52 Q. [- y/ X4 n
然后执行make,
; n" P, m5 k2 a# W5 Y* n  A会提示让你输入make 系统,因为我的系统是linux的,
/ r# o2 C) l7 _. V( x: t+ P* c因此我输入make linux
* k  i" Q0 v* d. F  ]2、编译安装boost
! W) C% u- o! s: Y% f1 b#tar -zxvf boost_1_49_0.tar.gz
- U8 ?, O6 f0 j; l- n0 Z8 I5 m#cd boost_1_49_0
) X6 p. ^4 O* {. Q6 X# i9 y#./bootstrap.sh
( S3 }1 x8 I3 T#./b2 install2 C  `+ E* V9 g& O
3、MYSQL5.5安装详细步骤:1 r, O5 Z2 p7 S' t* D* A
#tar zxvf cmake-2.8.7.tar.gz -C /usr/local/src/
( G' B1 |% K9 S  @* U3 k  {#tar zxvf mysql-5.5.23.tar.gz -C /usr/local/src/
' S& q) e/ v% q4 t2 u# cd /usr/local/src/cmake-2.8.7/4 @  @4 h; }$ ^! ]
# ./configure
3 [5 j8 V  Z  ~# ^- o1 h# G2 _# gmake
+ |: n. f9 s7 y, G; w# vim /etc/profile
0 `: ?/ E5 b, E  n$ |* Q* gexport PATH=/usr/local/mysql/bin:$PATH 添加
* ]+ f5 r( z  Y% w; ]7 g# . /etc/profile$ ?/ e, E# M- l) g, k
启动mysql:
: x& P2 \5 q: G1 j/etc/init.d/mysqld start
5 K7 T5 l/ Y+ Z" M# uchkconfig --add mysqld  l& z- p0 V+ l$ L
chkconfig mysqld on
" n1 M" H; _" X- T: q% x# mysql8 i- j% u* f( o4 Y7 l! q
mysql
  W2 h8 s  \$ m$ n4 ~8 n9、mysql++安装
5 p7 R2 x* ]1 rtar -zxvf mysql++-3.1.0.tar.gz$ y& S- f1 o! l/ n+ u7 \$ L
cd mysql++-3.1.0, r8 d0 O# z# P9 R, v
./configure
6 Q$ T+ O- j2 m# D% n3 Bmake+ p4 _7 l0 C; g% f6 X+ }5 f
make install
* F, l" }+ \2 O( e# pwd8 }! Q) |3 N. K+ q1 m
/root/mysql++-3.1.0
  @  p2 P$ v- T$ U#vim ssx/genv2.cpp 根据报错在这个文件中找到相应位置添加最下面那条命令
% P5 K" u6 E8 p( a#include iostream6 N0 b' Z/ G2 h9 H; n7 `
#include fstream
0 ]( {+ A4 n" G/ i) q, X6 Y#include typeinfo! j/ }2 B9 F8 [7 a( N
#include string.h
' s3 q+ t# M1 s, g$ k0 z) M6 _程序启动报错解决:% P5 M. `4 {, o& n
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/& }8 T+ r7 @  F& v
mysql select user,host,password from mysql.user;查看用户信息' K2 c+ t2 Z, {- `6 a. B
+------+------------+-------------------------------------------+6 @8 H" X$ J' B$ r: k( y
| user | host | password |0 U9 _6 y1 i/ |) j6 i$ V
+------+------------+-------------------------------------------+
, h: e/ K$ ?$ n$ T( p) q+ H| root | localhost | |
$ r* @+ N% b) B- u. L9 M| root | 10-6-3-176 | |4 N% U5 t; D8 t+ D3 l, @6 ]' t
| root | 127.0.0.1 | |- u0 `! o* c# K1 b7 Z0 E
| root | % | |4 {- J: t: r& r. j2 \
+------+------------+-------------------------------------------+, h+ t* S8 q: x6 s6 ~
4 rows in set (0.00 sec)2 F9 b7 W4 ^, y
mysql set password for root@localhost=password('XXXXXXX');设置root密码
+ g7 R9 z( j; L8 w8 emysql set password for root@'10-6-6-23'=password('XXXXXXXX');
4 f" j/ }, A' A2 c6 t0 E0 fmysql grant all on *.* to root@% identified by 'XXXXXXXX';授权
- U2 E$ Y# `  e, Y1 Nmysql select user,host,password from mysql.user;
; i# A# n0 v2 s3 g" j5 K4 H+------+------------+-------------------------------------------+
( ~( L# M. n+ N- J| user | host | password |
( G6 X! T% {8 m# D+ W" z) C$ C5 r+------+------------+-------------------------------------------+
9 [# q* J( L1 Z( `| root | localhost | *C07583ABFCBBCC5D64C9469E28D4861951C5024A |
8 ]4 V, N1 v6 d, o# a$ J7 b" j| root | 10-6-3-176 | *C07583ABFCBBCC5D64C9469E28D4861951C5024A |
7 G' G, C$ J5 m( `# r* ]: O| root | 127.0.0.1 | |5 t: \5 t8 h. F- L, T3 C
| root | % | *4F048907E92401E909B60D4C90426C4D3AEB499D |0 b7 m. P+ H& E3 }4 _1 t8 c. Z2 D
+------+------------+-------------------------------------------+$ Z/ ^0 i- m& @9 v0 a: Z+ a+ }3 ]
4 rows in set (0.00 sec)' t9 ?9 o  C. k$ G
mysql delete from mysql.user where user='';删除匿名用户4 S$ |8 m% s( b: N( `2 w7 Q1 E3 h
5 ]( c3 Y4 j' m, Q0 n
mysql grant select on uctot.* to 小用户@'%' identified by XXXXXXXX;授权8 S$ ^* A# E# d8 v0 C5 g& c5 k
mysql show grants for root@%;查看用户有那些权限
( f( B  k$ z5 t( c. U2 i8 K  Jmysql grant select on *.* to chinatot@% identified by 'XXXXXXXXX';
. b2 T/ x7 M! Y+ Amysql flush privileges;* t9 ]$ R2 V) |0 X3 x
mysql exit! f6 k" \/ W0 M- t/ i
下载地址:
2017-11-3 06:07 上传
下载权限:
版本vip会员
本地下载 检测资源   提取码: 需要终身vip或更高权限
有些游戏资源需要vip下载开通请点击开通vip
回复

使用道具 举报

全部回复0 显示全部楼层

发表回复

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

本版积分规则

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