狠狠撸

狠狠撸Share a Scribd company logo
笔贬笔在金山游戏运营中的应用




      张宴     30分钟
             30分钟
议    题
?PHP在金山游戏官方网站(www.xoyo.com)中的应用:
 PHP在金山游戏官方网站(www.xoyo.com)中的应用:
    在金山游戏官方网站(www.xoyo.com

 ①、PHP团队协作开发;
 ②、PHP系统架构应用。

?PHP在金山游戏运营系统 Keyes 中的应用:
 PHP在金山游戏运营系统

 ①、分层架构设计模型;
 ②、通用性API接口设计。




              笔贬笔在金山游戏运营中的应用
PHP在金山游戏官方网站(www.xoyo.com)中的应用
PHP在金山游戏官方网站(www.xoyo.com)中的应用
   在金山游戏官方网站(www.xoyo.com




              笔贬笔在金山游戏运营中的应用
笔贬笔团队协作开发环境

?团队协作,多人同时开发一个PHP项目时,开发环境、
测试环境,如何即满足每位程序员的快速调试需求,
又做到版本控制?




         笔贬笔在金山游戏运营中的应用
笔贬笔团队协作开发环境




   笔贬笔在金山游戏运营中的应用
笔贬笔团队协作开发环境
          开发了协作开发环境
          配置工具:XDevelop




   笔贬笔在金山游戏运营中的应用
笔贬笔团队协作开发环境
?设置“C:WINDOWSsystem32driversetchosts ”为本机IP:
  127.0.0.1        test.xoyo.com
?在自己的电脑上,修改完一个文件(例如:
phpinfo.php),即可马上用浏览器运行、调试;

?本地调试没问题
后,再提交SVN;

?提交到SVN后,自
动同步到Linux测试
服务器,供后续测试。
                     笔贬笔在金山游戏运营中的应用
笔贬笔团队协作开发环境
?在Windows上编写的PHP代码文件,用Linux环境的
PHP(FastCGI)来调试,保证了开发环境、测试环境、
生成环境的统一;

?整个PHP开发环境、测试环境,即保证了程序员的快
速修改、调试代码需求,又保证了整个代码都在SVN版
本控制之中。




            笔贬笔在金山游戏运营中的应用
PHP代码的统一性保证

?“开发环境→线下测试环境→线上测试环境→线上正
式环境”,连接的MySQL、Memcached、接口IP、端口各
不同,程序员一头雾水,经常改错配置文件或忘记修
改,如何解决?

?谁最了解各种服务器环境的配置?──系统工程师。

?那么,为什么不分离?



             笔贬笔在金山游戏运营中的应用
PHP代码的统一性保证
?解决方案:自行开发“配置管理后台+PHP扩展”,通过实现一
个函数kae_config(),在不同的服务器环境,可以获取到不同
的配置信息,保证PHP配置文件不用因环境不同而修改。
<?php
$mysql_name_master = kae_config("name","mysql","master"); // 主库
$mysql_name_slave = kae_config("name","mysql","slave"); // 从库
$config['db'] = array('master' => array
    ( 'host' => mysql_name_master['host'].":".$mysql_name_master['port'],
       'username' => $mysql_name_master['user'],
       'password' => $mysql_name_master['pass'],
    ),
    'slave' => array
    (
       'host' => $mysql_name_slave['host'].":".$mysql_name_slave['port'],
       'username' => $mysql_name_slave['user'],
       'password' => $mysql_name_slave['pass'],
    ),
);
?>
                            笔贬笔在金山游戏运营中的应用
PHP代码的上线发布与回滚

?将上线发布的版本号(例如:2.1.46),与SVN版本
号(例如:r21909)相对应,建立拥有Web界面的
《PHP代码发布系统》。

?代码的发布上线,可由项目负责人(工程师)自行
完成,一般无需系统工程师的协助。




           笔贬笔在金山游戏运营中的应用
PHP代码发布系统




  笔贬笔在金山游戏运营中的应用
PHP代码发布系统




  笔贬笔在金山游戏运营中的应用
PHP与开源产物、C/C++程序的结合
?方式一:利用PHP客户端扩展,通过TCP协议与C/C++开源程序进行通讯(例如,与
Sphinx搜索、分布式图片处理系统、TT、Memcached通讯);




                 笔贬笔在金山游戏运营中的应用
PHP与开源产物、C/C++程序的结合
?方式二:利用fsocketopen()、file_get_contents()、cURL等函数,通过HTTP协议
与C/C++开源程序进行通讯。(例如,与我们自行开发的开源简单消息队列软件:
HTTPSQS【http://code.google.com/p/httpsqs】进行通讯。)




                      笔贬笔在金山游戏运营中的应用
PHP Web程序中的异步处理

?在PHP Web程序中,发送手机短信、电子邮件、转换
视频格式、记录日志、数据挖掘采集等,都是比较耗
时的操作。

?为了增强用户体验,需要将这些操作转为异步执行。




          笔贬笔在金山游戏运营中的应用
PHP Web程序中的短耗时异步处理

?前提:使用Nginx+PHP(php-fpm FastCGI)架构。

?PHP-FPM 提供了fastcgi_finish_reques()
                                  函数。
 <?php
 echo '输出内容给用户 ';

 fastcgi_finish_request();
 /* 用户访问完成,不会等待下面的操作。 */

 sleep(5); //假设一个耗时的处理过程
 file_put_contents('/tmp/logs.txt', ' 记录日志 ');
 ?>



                            笔贬笔在金山游戏运营中的应用
PHP Web程序中的短耗时异步处理

?fastcgi_finish_reques()
                       函数的缺点:

?PHP FastCGI 进程数有限,正在处理异步操作的php-
cgi进程,无法处理新请求;

?如果并发访问量较大,php-cgi进程数用满,新访问
请求,将没有php-cgi去处理。Nginx服务器会出现:
502 Bad Gateway。


              笔贬笔在金山游戏运营中的应用
PHP Web程序中的长耗时异步处理
?使用简单消息队列,来解决长耗时异步处理:




         笔贬笔在金山游戏运营中的应用
笔贬笔在负载均衡架构中的约束




    笔贬笔在金山游戏运营中的应用
PHP在Web服务器负载均衡架构中的约束
?PHP Web程序,不在Web服务器上生成html静态文件、
PHP文件、缓存文件;
?数据对象的缓存,用APC、Memcached代替;
?HTML输出网页的缓存,用前端的Nginx负载均衡软
件,来实现;
?优点:①Web服务器上,PHP文件能够通过代码发布系
统统一管理,增、删Web服务器,非常快捷;清除缓
存,能够由系统工程师去统一管理。
②不经过《代码发布系统》生成、修改的PHP文件,
Web服务器自动禁止执行,做到防篡改、防挂马。
           笔贬笔在金山游戏运营中的应用
PHP在Web服务器负载均衡架构中的约束

?如果需要记录Session会话,在负载均衡服务器上做
IP哈希,或在PHP Web服务器上做Session共享,必不
可少。




            笔贬笔在金山游戏运营中的应用
PHP在金山游戏运营系统 Keyes 中的应用
PHP在金山游戏运营系统




         笔贬笔在金山游戏运营中的应用
界面、接口、支撑,分层架构设计




   PHP、C程序的交互



        笔贬笔在金山游戏运营中的应用
数据交互设计

                             ⑥⑦两个步骤表示
                             KingEyes“管理界面”通过
                             AJAX轮询请求“功能接口”
                             获取返回信息。




? 运营指令(修改经验倍数、踢人、发消息广播、启动游戏、停止游戏、更新游戏程序
  、更新配置文件、并服)
   – 步骤:①②③④⑤⑥⑦
? 服务器监控(CPU、磁盘、内存、进程数、系统负载、游戏服务端进程是否存在等)
   – 步骤:⑤⑥⑦
? 游戏心跳检测(Ping包检测,确定游戏是否正常运行)
   – 步骤:③④⑤⑥⑦
? 游戏在线人数(查看游戏总在线人数、各地图在线人数)
   – 步骤:③④⑤⑥⑦


                笔贬笔在金山游戏运营中的应用
一套程序兼容不同游戏的服务端架构
                      甲:
                      甲:我从不坐大巴,我
                      要开自己的奥迪车过来
与游戏进程交互的初期接口设计方案      (不满意)

                      乙:
                      乙:奥拓车虽烂,我仍
                      然原意自己开车,而不
                      是坐大巴(不满意)


                      丙:
                      丙:我喜欢骑摩托车过
                      来(不满意)
KE游戏运营平台   派大巴车来接啦!


                      丁:
                      丁:有大巴车接?太好
                      了。(满意)



            笔贬笔在金山游戏运营中的应用
一套程序兼容不同游戏的服务端架构

                     甲
与游戏进程交互的正式接口设计方案     (满意)




                     乙
                     (满意)




KE游戏运营平台   接口犹如道路。   丙
                     (满意)
           不限制交通工
           具,但需要受交
           通规则的约束。
                     丁
                     (满意)
一套程序兼容不同游戏的服务端架构




   ?以游戏服务端程序的每一个进程为单位,进行通讯。

        笔贬笔在金山游戏运营中的应用
2011 PHP技术高峰论坛演讲 张宴

More Related Content

2011 PHP技术高峰论坛演讲 张宴