【转】网页游戏能用PHP做后端开发吗? PHP Libevent扩展安装及应用

网页游戏能用PHP做后端开发吗?

当然可以。最好走HTTP,也可以做网络编程,而且写代码超简单,1个函数就可以建一个服务器端。stream_socket_server()
多线程不是什么好主意,你可以用php libevent扩展,异步高并发。PHP还有很多网络的扩展包。
PHP的开发效率高,.net Java ,你足够有钱,可以用。

PHP Libevent扩展安装及应用

libevent是一个基于事件驱动的高性能网络库。支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。
PHP libevent扩展安装:
libevent扩展依赖于原始的libevent库,必须先把libevent库安装。
(1)安装libevent库

  1. wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz
  2. tar zxvf libevent-2.0.20-stable.tar.gz
  3. cd libevent-2.0.20-stable/
  4. ./configure --prefix=/usr/local/libevent-2.0.20/
  5. make
  6. make install

(2)安装libevent扩展(http://pecl.php.net/package/libevent)

  1. wget http://pecl.php.net/get/libevent-0.1.0.tgz
  2. tar -zxvf libevent-0.1.0.tgz
  3. cd libevent-0.1.0
  4. ./configure --with-php-config=/usr/local/php54/bin/php-config --with-libevent=/usr/local/libevent-2.0.20/
  5. make && make install
  6. #php.ini添加extension=libevent.so

PHP Libevent扩展介绍:
(1)常量

(2)函数

  • event_base_free() 释放资源,这不能销毁绑定事件
  • event_base_loop() 处理事件,根据指定的base来处理事件循环
  • event_base_loopbreak() 立即取消事件循环,行为各break语句相同
  • event_base_loopexit() 在指定的时间后退出循环
  • event_base_new() 创建并且初始事件
  • event_base_priority_init() 设定事件的优先级
  • event_base_set() 关联事件到事件base
  • event_buffer_base_set() 关联缓存的事件到event_base
  • event_buffer_disable() 禁用一个缓存的事件
  • event_buffer_enable() 启用一个指定的缓存的事件
  • event_buffer_fd_set() 改变一个缓存的文件系统描述
  • event_buffer_free() 释放缓存事件
  • event_buffer_new() 建立一个新的缓存事件
  • event_buffer_priority_set() 缓存事件的优先级设定
  • event_buffer_read() 读取缓存事件中的数据
  • event_buffer_set_callback() 给缓存的事件设置或重置回调hansh函数
  • event_buffer_timeout_set() 给一个缓存的事件设定超时的读写时间
  • event_buffer_watermark_set 设置读写事件的水印标记
  • event_buffer_write() 向缓存事件中写入数据
  • event_add() 向指定的设置中添加一个执行事件
  • event_del() 从设置的事件中移除事件
  • event_free() 清空事件句柄
  • event_new() 创建一个新的事件
  • event_set() 准备想要在event_add中添加事件

PHP Libevent扩展使用:
例1:5s后触发callback

  1. $base = event_base_new();
  2. $event = event_new();
  3. event_set($event, 0, EV_TIMEOUT, function() {
  4. echo "function called";
  5. });
  6. event_base_set($event, $base);
  7. event_add($event, 5000000);
  8. event_base_loop($base);

例2:打印输入流

  1. function print_line($fd, $events, $arg)
  2. {
  3. static $max_requests = 0;
  4. $max_requests++;
  5. if ($max_requests == 10) {
  6. // exit loop after 10 writes
  7. event_base_loopexit($arg[1]);
  8. }
  9. echo fgets($fd);
  10. }
  11. // create base and event
  12. $base = event_base_new();
  13. $event = event_new();
  14. $fd = STDIN;
  15. // set event flags
  16. event_set($event, $fd, EV_READ | EV_PERSIST, ‘print_line‘, array($event, $base));
  17. // set event base
  18. event_base_set($event, $base);
  19. // enable event
  20. event_add($event);
  21. // start event loop
  22. event_base_loop($base);

例3:实现简单web server
在cli执行后,打开浏览器2000端口试试看。

  1. $socket = stream_socket_server (‘tcp://0.0.0.0:2000‘, $errno, $errstr);
  2. stream_set_blocking($socket, 0);
  3. $base = event_base_new();
  4. $event = event_new();
  5. event_set($event, $socket, EV_READ | EV_PERSIST, ‘ev_accept‘, $base);
  6. event_base_set($event, $base);
  7. event_add($event);
  8. event_base_loop($base);
  9. function ev_accept($socket, $flag, $base)
  10. {
  11. $connection = stream_socket_accept($socket);
  12. stream_set_blocking($connection, 0);
  13. $buffer = event_buffer_new($connection, ‘ev_read‘, NULL, ‘ev_error‘, $connection);
  14. event_buffer_base_set($buffer, $base);
  15. event_buffer_timeout_set($buffer, 30, 30);
  16. event_buffer_watermark_set($buffer, EV_READ, 0, 0xffffff);
  17. event_buffer_priority_set($buffer, 10);
  18. event_buffer_enable($buffer, EV_READ | EV_PERSIST);
  19. $GLOBALS[‘_‘] = $buffer; //这个buffer一定要赋给个全局的变量 貌似是传值过程中的bug 或者5.3.8的闭包还是有问题?
  20. }
  21. function ev_error($buffer, $error, $connection)
  22. {
  23. event_buffer_disable($buffer, EV_READ | EV_WRITE);
  24. event_buffer_free($buffer);
  25. fclose($connection);
  26. }
  27. function ev_read($buffer, $connection)
  28. {
  29. while ($read = event_buffer_read($buffer, 256)) {
  30. }
  31. fwrite($connection , date(‘Y-m-d H:i:s‘));
  32. ev_error($buffer , ‘‘ , $connection);
  33. }

参考资料:

时间: 2024-07-30 09:58:02

【转】网页游戏能用PHP做后端开发吗? PHP Libevent扩展安装及应用的相关文章

网页游戏

网页游戏_百度百科http://baike.baidu.com/link?url=__mxqeSPiqAO_TGydqkd7M8BGmboUrei_rqfDzv59uOS9GxVe1UdbsClJgg2l5qCuFy4qzFWgaQo9GeZeaBpeiTo2npMjlMvFD6Wb-QNY8D1iT_phwtSVuq1RFOUAocv 页游 即 网页游戏 . 网页游戏又称Web游戏,无端网游,简称页游.是基于Web浏览器的网络在线多人互动游戏,无需下载客户端,只需打开IE网页,10秒钟即可进入

最新dedecms网页游戏开服表发号网站源码模板

模板介绍 最新dedecms网页游戏开服表发号网站源码模板,让你更精确的把握游戏开服时间和战略技巧. 这套网页游戏模板是织梦二次开发后的一套网页源码,后台也是经过二次开发后,适合游戏网站的一些参数说明及添加信息. 模板文件: 404.htm            大气的404页面 article_fahao.htm  发号模板详细页 article_time.htm   发号时间详细页 footer_time.htm    发号时间底部模板 head_time.htm      发号时间头部模板

arpg网页游戏特效播放(一)

网页游戏中的特效,主要包括:场景特效,攻击特效和UI特效三种.场景特效是在地图层上播放的特效,攻击特效主要是技能触发的一些特效,UI特效是面板上的一些特效,还有一些在人物身上播放的特效,例如脚底光圈特效等.特效的播放方式有两种,一种是直接播放swf,二种是根据图片序列,直接绘画到Bitmap上,对于两种方式,我比较倾向于直接绘画到Bitmap上.一般我们我们处理程序的逻辑是,显示和逻辑分开.对于特效显示逻辑,就是特效的绘画逻辑,以及资源的整理方式,逻辑就是特效的播放位置和播放时机不一样而已.所以

Unity网页游戏特点分析

Unity网页游戏是跑在浏览器的UnityWebPlayer插件中的,运行的模式是webplayer.unity3d+html 在嵌入UnityWebPlayer的网页中会调用UnityObject2的initPlugin函数,将webplayer.unity3d作为参数传入来初始化Unity网页游戏的运行环境 注:游戏dll及其他托管dll在构建Web版本时都会写入到webplayer.unity3d文件中 UnityObject2.js (其他链接1  其他链接2) 拥有检测 Unity W

网页游戏运营模式研究

网页游戏的定义   网页游戏的英文名称为又称无客户端网络游戏,它是基于浏览器的网络在线多人互动的游戏,也是网络游戏的一种.这种游戏的特点是玩家无需下载游戏客户端及安装,只需短短的几秒钟就可打开网页用浏览器加载就能玩的网络游戏.尤其适合上班及没有时间休闲娱乐的人群,只要花一点点时间并且消费成本比较低,而且游戏内具有自动成长功能,玩家即使关掉电脑也可心满意足的去工作,如果想随时了解游戏内的具体情况,还有一些游戏具有短信提醒功能. 中国网页游戏从发展初期,再到如今的爆发式发展,中国网页游戏规模不断的扩

arpg网页游戏之地图(三)

地图分块加载类MapEngine,主要包含以下属性: g 地图层graphics,地图将画在上面 buffPixelRange 地图加载范围矩形 viewPort 屏幕视窗 currZoneArr 已经加载过的地图块 waitLoadZone 待加载地图块 showZone 加载完成即将显示的地图块 preLoaderNmu 预加载块数 单独说下地图层graphics,Graphics实际上为一个shape对象,我把所有的加载的地图块,draw到graphics上,也有很多创建多个bitmap对

arpg网页游戏之地图(二)

这一节说说视窗,这个视窗,也就是游戏的视角.现在的网页游戏分为2D游戏,2.5D游戏和3D游戏,2D游戏基本是一些横板的,2.5D基本都是arpg的,可以说游戏画面投影的角度略有不同,3D网页游戏,现在也有不少,效果做的不错的,都是带微端的,不带微端同屏人数过多就会出现卡顿的情况.个人感觉网页还不太适合做3D的,一是效率问题,二是表现效果不如端游炫.端游开发周期较长,世界观比较宏大,玩家呢,要适应游戏世界,并在里面找到自己的定位,这样玩家的忠诚度比较高:而网页游戏的目的不恰恰相反,它主要是迎合玩

AS3.0网页游戏优化一

有道无术,术尚可求,有术无道,止于术.神即道,道法自然,如来! 借用上面的一句话,来开启AS3.0网页优化的一些策略,在从事大约两年多的网页游戏行业,对于AS3.0性能优化,有一些自己的见解和想法,及此分享给大家,仅供抛砖引玉,鄙人拙见,愿给从事网页游戏的人以启迪. 我认为AS3.0的性能分两部分,第一部分是技术性优化,就是在理解flash 弹性跑道模型渲染原理和AVM本身一些垃圾回收原则等,对自己的程序进行一系列的性能优化.第二部分是游戏逻辑性优化.我只从事过2.5D arpg网页游戏的制作,

网页游戏服务端-人物移动广播优化

[本文转自网络http://janeky.iteye.com/blog/1614175] 这段时间在处理服务端人物移动广播遇到了问题,记录一下. 1.问题 现在的页游都朝着客户端的方向靠齐了,大地图,千人同屏.因此,也给页游的服务端开发带来了不少的挑战.假设一个场景地图是8000*8000大小,同时有1000人在.1秒钟内,每个玩家移动一次.按照最原始的做法,就是给同一个场景的用户广播消息.简单计算一下广播量:1000*1000=1000000的广播量,有点恐怖. 2.方案 优化的目标肯定是减少