文档章节

赢三张H5(PHP+Egret+Websocket)

呵大官人
 呵大官人
发布于 2016/10/12 22:30
字数 848
阅读 4136
收藏 9

简介

前阵子公司说准备试一试h5,于是我决定研究一下,而对于像我这种没有客户端经验的来说,选择一款入门简单的h5框架,能省不少事。当时毫不犹豫的就选择了egret(别问我为什么,我也不知道),把整个文档简单过了一遍之后,就撸起袖子准备搞事,决定做一款赢三张H5来练练手,于是好戏就这么开场了。。

不知道有没有人玩过皮皮麻将,这个跟他玩法基本一致,自己先开房间,然后邀请别人来比赛,每个房间固定能玩5局,最终结算积分,下面先贴一下游戏截图,注:很多资源都是从欢乐赢三张APP里面借(chao)鉴(xi)的。

 

项目介绍

项目地址:http://git.oschina.net/scgywx/threecard

演示地址(用微信打开效果更佳哦):http://three.phporz.com

客户端使用egret框架,语言使用ts(js的超集),最终都会生成为js,而服务端则是使用php,服务端框架是yaf(鸟哥出品),协议使用websocket,网关使用fooking。

client //客户端源代码
   libs //egret的库文件
   bin-debug  //debug版本代码
   bin-release  //release版本代码,发布的时候需要从这个目录copy文件
   resource //资源文件,包括图片和skin(这个目录是经过tm合并过的文件)
   resource-all //这个是资源文件没有经过tm合并的
   src //这就是源代码了
   index.html //入口文件(这个文件发布后会命名为game.html)

web //网页相关
   api //游戏相关http的api,如登录、服务器信息等
       api.php //api统一入口文件
   game //游戏客户端目录
       libs //egret库文件
       resource //资源文件
       game.html //游戏页面
       index.html //入口页面(这个页面会根据不同版本跳转,防止客户端cache)
       main.min.js //整个游戏逻辑代码
       version.js //game.html文件的版本号

server //服务端代码
   config //配置文件
   controllers //控制器
   crontab //定时器,主要用于处理断开连接的玩家
   library //库文件
   models //具体逻辑
   protocol //协议部分

tools //工具
   release.php //发布版本的时候,需要执行这里,会复制client/bin-release/web/v1目录下的文件,并且处理版本号

 

客户端配置

只需要使用nginx或者apache,将目录指向web/game目录即可

 

API配置

需要支持php环境,然后将目录指向web/api目录即可。如果api的域名不是127.0.0.1,可以在web/game/game.html中修改API_SERVER。

 

服务端配置

服务端部分使用php,那么跟客户端交互使用fooking来维护长连接,所以必须要需要先架设fooking,这里就不详细讲了,感兴趣的朋友可以点击这里,然后将目录指向server即可,配置端口号9005.  
服务端还需要使用redis,用来保存游戏信息(同时别忘了php要安装phpredis扩展哦),然后配置有两个地方,一个是server/config/redis.php,另一个是web/api/api/include/config.inc.php。

 

结语

这是我初学egret练手项目,难免有些地方处理欠妥,如果有入不了法眼的地方,望轻喷。同时还希望各位能提供更好的建议和意见。

© 著作权归作者所有

共有 人打赏支持
呵大官人

呵大官人

粉丝 122
博文 18
码字总数 16428
作品 1
浦东
高级程序员
私信 提问
加载中

评论(16)

s
skindxy

引用来自“skindxy”的评论

2017-10-27 17:50:32.424121 [DEBUG][40647] version=1, type=7, requestid=1, contentLength=23, paddingLength=1, reserved=0, data=Primary script unknown

2017-10-27 17:50:32.424125 [ERROR][40647] backend error!!!, Primary script unknown

2017-10-27 17:50:32.424130 [DEBUG][40647] version=1, type=6, requestid=1, contentLength=107, paddingLength=5, reserved=0, data=Status: 404 Not Found
X-Powered-By: PHP/5.6.20
Content-type: text/html; charset=UTF-8

File not found.

出现上面的错误,是什么配置不对吗?

引用来自“呵大官人”的评论

config.lua里面的FASTCGI_ROOT配置的路径不对,这个路径是server的路径
已经OK,谢谢
呵大官人
呵大官人

引用来自“skindxy”的评论

2017-10-27 17:50:32.424121 [DEBUG][40647] version=1, type=7, requestid=1, contentLength=23, paddingLength=1, reserved=0, data=Primary script unknown

2017-10-27 17:50:32.424125 [ERROR][40647] backend error!!!, Primary script unknown

2017-10-27 17:50:32.424130 [DEBUG][40647] version=1, type=6, requestid=1, contentLength=107, paddingLength=5, reserved=0, data=Status: 404 Not Found
X-Powered-By: PHP/5.6.20
Content-type: text/html; charset=UTF-8

File not found.

出现上面的错误,是什么配置不对吗?
config.lua里面的FASTCGI_ROOT配置的路径不对,这个路径是server的路径
s
skindxy
2017-10-27 17:50:32.424121 [DEBUG][40647] version=1, type=7, requestid=1, contentLength=23, paddingLength=1, reserved=0, data=Primary script unknown

2017-10-27 17:50:32.424125 [ERROR][40647] backend error!!!, Primary script unknown

2017-10-27 17:50:32.424130 [DEBUG][40647] version=1, type=6, requestid=1, contentLength=107, paddingLength=5, reserved=0, data=Status: 404 Not Found
X-Powered-By: PHP/5.6.20
Content-type: text/html; charset=UTF-8

File not found.

出现上面的错误,是什么配置不对吗?
呵大官人
呵大官人

引用来自“yipinzhe”的评论

谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目👍

我在 CentOS 6.8 下安装、部署成功了,总结一下:

一、百度一下,CentOS 下安装 Apache ;

二、百度一下,CentOS 下安装 PHP ;

三、百度一下,CentOS 下安装、配置 Redis ;

四、百度一下,CentOS 下安装 PHP-FPM ;

五、百度一下,CentOS 下安装、配置 Yaf ;

六、以上的准备工作,如果报错,提示少什么软件包,就 yum install 一下;

七、以上准备工作成功完成,按照“呵大官人”的说明,安装、配置 fooking ;

八、git clone threecard 项目;

九、将 fooking 的 config.lua 配置文件,改为:
HOST = "你的 IP ";
PORT = 8015;
FASTCGI_ROOT = "/你的路径/server";
FASTCGI_FILE = "server.php";
注意:FASTCGI_ROOT 不要指向 root ,会提示找不到脚本文件,最好将 server 目录整个放在 /var 目录下,我的是 /var/server

十、将 threecard/htdocs 下的文件全都复制到 Apache 的 html 目录,我的是 /var/www/html ;

十一、重点来了,可以访问,不能登录?
报“Fatal error: Function name must be a string in /var/server/library/Protox.php on line 89”
我是将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k];
然后浏览器访问 IP ,见证奇迹的时刻来了✌
成功了!

引用来自“呵大官人”的评论

Protox报错,说明协议文件定义有问题。

引用来自“yipinzhe”的评论

86至90行代码:

$func = self::$convertFunc[$opt['type']];
if($func){
//类型转换
$output = $func($this->input[$k], $opt);
}

好像是类型转换的问题,$func 定义:

static private $convertFunc = array(
    'int' => array('Protox', 'toInt'),
    'double' => array('Protox', 'toDouble'),
    'string' => array('Protox', 'toString'),
    'array' => array('Protox', 'toArray'),
    'object' => array('Protox', 'toObject'),
  );

引用来自“呵大官人”的评论

协议文件你没改过吗?就是protocol目录下的协议定义。。

引用来自“yipinzhe”的评论


没改过的,原装的,为了运行,将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k]; 就好了
知道了,应该是你php版本低于5.4,所以报错了,,可以改成call_user_func($func, $this->input[$k], $opt)。这样就好了,,
呵大官人
呵大官人

引用来自“yipinzhe”的评论

谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目👍

我在 CentOS 6.8 下安装、部署成功了,总结一下:

一、百度一下,CentOS 下安装 Apache ;

二、百度一下,CentOS 下安装 PHP ;

三、百度一下,CentOS 下安装、配置 Redis ;

四、百度一下,CentOS 下安装 PHP-FPM ;

五、百度一下,CentOS 下安装、配置 Yaf ;

六、以上的准备工作,如果报错,提示少什么软件包,就 yum install 一下;

七、以上准备工作成功完成,按照“呵大官人”的说明,安装、配置 fooking ;

八、git clone threecard 项目;

九、将 fooking 的 config.lua 配置文件,改为:
HOST = "你的 IP ";
PORT = 8015;
FASTCGI_ROOT = "/你的路径/server";
FASTCGI_FILE = "server.php";
注意:FASTCGI_ROOT 不要指向 root ,会提示找不到脚本文件,最好将 server 目录整个放在 /var 目录下,我的是 /var/server

十、将 threecard/htdocs 下的文件全都复制到 Apache 的 html 目录,我的是 /var/www/html ;

十一、重点来了,可以访问,不能登录?
报“Fatal error: Function name must be a string in /var/server/library/Protox.php on line 89”
我是将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k];
然后浏览器访问 IP ,见证奇迹的时刻来了✌
成功了!

引用来自“呵大官人”的评论

Protox报错,说明协议文件定义有问题。

引用来自“yipinzhe”的评论

86至90行代码:

$func = self::$convertFunc[$opt['type']];
if($func){
//类型转换
$output = $func($this->input[$k], $opt);
}

好像是类型转换的问题,$func 定义:

static private $convertFunc = array(
    'int' => array('Protox', 'toInt'),
    'double' => array('Protox', 'toDouble'),
    'string' => array('Protox', 'toString'),
    'array' => array('Protox', 'toArray'),
    'object' => array('Protox', 'toObject'),
  );

引用来自“呵大官人”的评论

协议文件你没改过吗?就是protocol目录下的协议定义。。

引用来自“yipinzhe”的评论


没改过的,原装的,为了运行,将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k]; 就好了
没道理啊,你知道是哪个controller,哪个action不,我试试。
y
yipinzhe

引用来自“yipinzhe”的评论

谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目👍

我在 CentOS 6.8 下安装、部署成功了,总结一下:

一、百度一下,CentOS 下安装 Apache ;

二、百度一下,CentOS 下安装 PHP ;

三、百度一下,CentOS 下安装、配置 Redis ;

四、百度一下,CentOS 下安装 PHP-FPM ;

五、百度一下,CentOS 下安装、配置 Yaf ;

六、以上的准备工作,如果报错,提示少什么软件包,就 yum install 一下;

七、以上准备工作成功完成,按照“呵大官人”的说明,安装、配置 fooking ;

八、git clone threecard 项目;

九、将 fooking 的 config.lua 配置文件,改为:
HOST = "你的 IP ";
PORT = 8015;
FASTCGI_ROOT = "/你的路径/server";
FASTCGI_FILE = "server.php";
注意:FASTCGI_ROOT 不要指向 root ,会提示找不到脚本文件,最好将 server 目录整个放在 /var 目录下,我的是 /var/server

十、将 threecard/htdocs 下的文件全都复制到 Apache 的 html 目录,我的是 /var/www/html ;

十一、重点来了,可以访问,不能登录?
报“Fatal error: Function name must be a string in /var/server/library/Protox.php on line 89”
我是将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k];
然后浏览器访问 IP ,见证奇迹的时刻来了✌
成功了!

引用来自“呵大官人”的评论

Protox报错,说明协议文件定义有问题。

引用来自“yipinzhe”的评论

86至90行代码:

$func = self::$convertFunc[$opt['type']];
if($func){
//类型转换
$output = $func($this->input[$k], $opt);
}

好像是类型转换的问题,$func 定义:

static private $convertFunc = array(
    'int' => array('Protox', 'toInt'),
    'double' => array('Protox', 'toDouble'),
    'string' => array('Protox', 'toString'),
    'array' => array('Protox', 'toArray'),
    'object' => array('Protox', 'toObject'),
  );

引用来自“呵大官人”的评论

协议文件你没改过吗?就是protocol目录下的协议定义。。

没改过的,原装的,为了运行,将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k]; 就好了
呵大官人
呵大官人

引用来自“yipinzhe”的评论

谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目👍

我在 CentOS 6.8 下安装、部署成功了,总结一下:

一、百度一下,CentOS 下安装 Apache ;

二、百度一下,CentOS 下安装 PHP ;

三、百度一下,CentOS 下安装、配置 Redis ;

四、百度一下,CentOS 下安装 PHP-FPM ;

五、百度一下,CentOS 下安装、配置 Yaf ;

六、以上的准备工作,如果报错,提示少什么软件包,就 yum install 一下;

七、以上准备工作成功完成,按照“呵大官人”的说明,安装、配置 fooking ;

八、git clone threecard 项目;

九、将 fooking 的 config.lua 配置文件,改为:
HOST = "你的 IP ";
PORT = 8015;
FASTCGI_ROOT = "/你的路径/server";
FASTCGI_FILE = "server.php";
注意:FASTCGI_ROOT 不要指向 root ,会提示找不到脚本文件,最好将 server 目录整个放在 /var 目录下,我的是 /var/server

十、将 threecard/htdocs 下的文件全都复制到 Apache 的 html 目录,我的是 /var/www/html ;

十一、重点来了,可以访问,不能登录?
报“Fatal error: Function name must be a string in /var/server/library/Protox.php on line 89”
我是将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k];
然后浏览器访问 IP ,见证奇迹的时刻来了✌
成功了!

引用来自“呵大官人”的评论

Protox报错,说明协议文件定义有问题。

引用来自“yipinzhe”的评论

86至90行代码:

$func = self::$convertFunc[$opt['type']];
if($func){
//类型转换
$output = $func($this->input[$k], $opt);
}

好像是类型转换的问题,$func 定义:

static private $convertFunc = array(
    'int' => array('Protox', 'toInt'),
    'double' => array('Protox', 'toDouble'),
    'string' => array('Protox', 'toString'),
    'array' => array('Protox', 'toArray'),
    'object' => array('Protox', 'toObject'),
  );
协议文件你没改过吗?就是protocol目录下的协议定义。。
y
yipinzhe

引用来自“yipinzhe”的评论

谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目👍

我在 CentOS 6.8 下安装、部署成功了,总结一下:

一、百度一下,CentOS 下安装 Apache ;

二、百度一下,CentOS 下安装 PHP ;

三、百度一下,CentOS 下安装、配置 Redis ;

四、百度一下,CentOS 下安装 PHP-FPM ;

五、百度一下,CentOS 下安装、配置 Yaf ;

六、以上的准备工作,如果报错,提示少什么软件包,就 yum install 一下;

七、以上准备工作成功完成,按照“呵大官人”的说明,安装、配置 fooking ;

八、git clone threecard 项目;

九、将 fooking 的 config.lua 配置文件,改为:
HOST = "你的 IP ";
PORT = 8015;
FASTCGI_ROOT = "/你的路径/server";
FASTCGI_FILE = "server.php";
注意:FASTCGI_ROOT 不要指向 root ,会提示找不到脚本文件,最好将 server 目录整个放在 /var 目录下,我的是 /var/server

十、将 threecard/htdocs 下的文件全都复制到 Apache 的 html 目录,我的是 /var/www/html ;

十一、重点来了,可以访问,不能登录?
报“Fatal error: Function name must be a string in /var/server/library/Protox.php on line 89”
我是将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k];
然后浏览器访问 IP ,见证奇迹的时刻来了✌
成功了!

引用来自“呵大官人”的评论

Protox报错,说明协议文件定义有问题。
86至90行代码:

$func = self::$convertFunc[$opt['type']];
if($func){
//类型转换
$output = $func($this->input[$k], $opt);
}

好像是类型转换的问题,$func 定义:

static private $convertFunc = array(
    'int' => array('Protox', 'toInt'),
    'double' => array('Protox', 'toDouble'),
    'string' => array('Protox', 'toString'),
    'array' => array('Protox', 'toArray'),
    'object' => array('Protox', 'toObject'),
  );
呵大官人
呵大官人

引用来自“yipinzhe”的评论

谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目👍

我在 CentOS 6.8 下安装、部署成功了,总结一下:

一、百度一下,CentOS 下安装 Apache ;

二、百度一下,CentOS 下安装 PHP ;

三、百度一下,CentOS 下安装、配置 Redis ;

四、百度一下,CentOS 下安装 PHP-FPM ;

五、百度一下,CentOS 下安装、配置 Yaf ;

六、以上的准备工作,如果报错,提示少什么软件包,就 yum install 一下;

七、以上准备工作成功完成,按照“呵大官人”的说明,安装、配置 fooking ;

八、git clone threecard 项目;

九、将 fooking 的 config.lua 配置文件,改为:
HOST = "你的 IP ";
PORT = 8015;
FASTCGI_ROOT = "/你的路径/server";
FASTCGI_FILE = "server.php";
注意:FASTCGI_ROOT 不要指向 root ,会提示找不到脚本文件,最好将 server 目录整个放在 /var 目录下,我的是 /var/server

十、将 threecard/htdocs 下的文件全都复制到 Apache 的 html 目录,我的是 /var/www/html ;

十一、重点来了,可以访问,不能登录?
报“Fatal error: Function name must be a string in /var/server/library/Protox.php on line 89”
我是将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k];
然后浏览器访问 IP ,见证奇迹的时刻来了✌
成功了!
Protox报错,说明协议文件定义有问题。
y
yipinzhe
谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目👍

我在 CentOS 6.8 下安装、部署成功了,总结一下:

一、百度一下,CentOS 下安装 Apache ;

二、百度一下,CentOS 下安装 PHP ;

三、百度一下,CentOS 下安装、配置 Redis ;

四、百度一下,CentOS 下安装 PHP-FPM ;

五、百度一下,CentOS 下安装、配置 Yaf ;

六、以上的准备工作,如果报错,提示少什么软件包,就 yum install 一下;

七、以上准备工作成功完成,按照“呵大官人”的说明,安装、配置 fooking ;

八、git clone threecard 项目;

九、将 fooking 的 config.lua 配置文件,改为:
HOST = "你的 IP ";
PORT = 8015;
FASTCGI_ROOT = "/你的路径/server";
FASTCGI_FILE = "server.php";
注意:FASTCGI_ROOT 不要指向 root ,会提示找不到脚本文件,最好将 server 目录整个放在 /var 目录下,我的是 /var/server

十、将 threecard/htdocs 下的文件全都复制到 Apache 的 html 目录,我的是 /var/www/html ;

十一、重点来了,可以访问,不能登录?
报“Fatal error: Function name must be a string in /var/server/library/Protox.php on line 89”
我是将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k];
然后浏览器访问 IP ,见证奇迹的时刻来了✌
成功了!
input file 多图片上传问题

我的file: 加上multiple=true之后支持多图片上传 我用h5写了一个本地预览功能,现在如果我想删除file中的某一张图片应该怎么操作? 注:这时候图片还没有上传到服务器,假如我选择了三张图片...

刘晓帅
2015/11/05
3K
1
js 自定义轮播 和 多想选项卡 在运行的时候 出现错误

无标题文档 Chestnut 首页 海外酒店 国际租车 机票 国际机票 国内机票 特价机票 机+酒店 火车票 国内火车票 国际火车票 度假 旅游 美食 攻略 全球购 名店购 退税 外币兑换 银联特惠 登陆 登陆...

徐小栗
2017/12/22
32
2
h5牛牛源码出售你的斗地主能拿多少炸?

最近无聊,想知道一下玩斗地主的话我能有多大的概率拿到炸弹(4张同点数牌 或 集齐大小王)。但是我概率学学得不好,于是想到用统计学来试试,随手写了一个程序模拟一下斗地主的发牌过程 面向...

sinat_41780517
03/02
0
0
【阿里移动质量中心】测试App赢话费

现在起加入MQC,精彩活动,缤纷好礼送给你!!! 阿里移动质量中心MQC平台新版隆重推出,比你更懂你的app。 手机换代,版本更替。上传你的app吧,百款机型,全面兼容。 网络攻击,数据泄露。...

rdtriny
2015/11/30
156
0
Github上有趣的项目,用机器学习训练AI下五子棋

Github上有趣的项目,用机器学习训练AI下五子棋 2018-07-30 18:05编辑: yyuuzhu分类:AI来源:程序师 AI机器学习 招聘信息: iOS开发 iOS开发 iOS开发 app开发上架H5技术 app开发技术 图像处...

yyuuzhu
07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部