简介
前阵子公司说准备试一试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练手项目,难免有些地方处理欠妥,如果有入不了法眼的地方,望轻喷。同时还希望各位能提供更好的建议和意见。
FASTCGI_ROOT = "/home/threecard/server";
FASTCGI_FILE = "server.php";
server/config/redis.php 和 htdocs/api/include/config.inc.php 需要修改什么?
引用来自“pig250”的评论
关于fooking 的配置,聊天室部署通过,但是这个项目配置以后连接不上服务器,config.lua中修改了FASTCGI_ROOT = "/home/threecard/server";
FASTCGI_FILE = "server.php";
server/config/redis.php 和 htdocs/api/include/config.inc.php 需要修改什么?
引用来自“kerwinz”的评论
我把fooking下载下来之后,然后用命令行编译么?windows和linux都可以吧?编译的话是先cd到根目录然后么?然后需要怎么做。。。我在 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:
成功了!
引用来自“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:
成功了!
引用来自“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报错,说明协议文件定义有问题。$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报错,说明协议文件定义有问题。引用来自“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'),
);
引用来自“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目录下的协议定义。。没改过的,原装的,为了运行,将 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目录下的协议定义。。引用来自“yipinzhe”的评论
: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目录下的协议定义。。引用来自“yipinzhe”的评论
:relaxed:没改过的,原装的,为了运行,将 89 行的 $output = $func($this->input[$k], $opt); 改为 $output = $this->input[$k]; 就好了
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.
出现上面的错误,是什么配置不对吗?
引用来自“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 unknown2017-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.
出现上面的错误,是什么配置不对吗?
引用来自“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 unknown2017-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的路径