文档章节

赢三张H5(PHP+Egret+Websocket)

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

简介

前阵子公司说准备试一试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练手项目,难免有些地方处理欠妥,如果有入不了法眼的地方,望轻喷。同时还希望各位能提供更好的建议和意见。

© 著作权归作者所有

共有 人打赏支持
呵大官人

呵大官人

粉丝 118
博文 17
码字总数 15799
作品 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 游戏项目:+1:

我在 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 ,见证奇迹的时刻来了:v:
成功了!

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

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”的评论

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

引用来自“yipinzhe”的评论

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

我在 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 ,见证奇迹的时刻来了:v:
成功了!

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

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”的评论

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

引用来自“yipinzhe”的评论

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

我在 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 ,见证奇迹的时刻来了:v:
成功了!

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

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目录下的协议定义。。
:relaxed:
没改过的,原装的,为了运行,将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k]; 就好了
呵大官人
呵大官人

引用来自“yipinzhe”的评论

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

我在 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 ,见证奇迹的时刻来了:v:
成功了!

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

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 游戏项目:+1:

我在 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 ,见证奇迹的时刻来了:v:
成功了!

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

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 游戏项目:+1:

我在 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 ,见证奇迹的时刻来了:v:
成功了!
Protox报错,说明协议文件定义有问题。
y
yipinzhe
谢谢“呵大官人”开源这个项目,这是我找到的最好的开源 PHP 游戏项目:+1:

我在 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 ,见证奇迹的时刻来了:v:
成功了!
input file 多图片上传问题

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

刘晓帅
2015/11/05
2.9K
1
h5牛牛源码出售你的斗地主能拿多少炸?

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

sinat_41780517
03/02
0
0
Github上有趣的项目,用机器学习训练AI下五子棋

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

yyuuzhu
07/30
0
0
贝叶斯居然用事件概率,就轻松预知了未来?

https://blog.csdn.net/BULpreZHt1ImlN4N/article/details/81463791 1969年,J. 理查德·戈特三世在普林斯顿攻读天体物理博士学位之前,他去欧洲旅行了一趟。他看见了柏林墙,那是8年前建成的...

Terminator2050
08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

74.expect脚本同步文件以及指定host同步文件 构建分发系统文件和命令

20.31 expect脚本同步文件: 在expect脚本中去实现在一台机器上把文件同步到另外一台机器上去。核心命令用的是rsync ~1.自动同步文件 #!/usr/bin/expect set passwd "123456" spawn rsync -a...

王鑫linux
15分钟前
0
0
TypeScript项目引用(project references)

转发 TypeScript项目引用(project references) TypeScript新特性之项目引用(project references) 项目引用是TypeScript 3.0中的一项新功能,允许您将TypeScript程序构建为更小的部分。 通过这...

durban
19分钟前
0
0
爬虫入门

导读 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取...

问题终结者
19分钟前
0
0
ppwjs之bootstrap文字排版:无序列表项不换行

<!DOCTYPT html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>ppwjs欢迎您</title><link rel="icon" href="/favicon.ico" ......

ppwjs
26分钟前
0
0
SpringBoot 学习一

本文将从以下几个方面介绍: 前言 HelloWorld 读取配置文件 例子(CURD) 前言 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架...

tsmyk0715
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部