赢三张H5(PHP+Egret+Websocket)
赢三张H5(PHP+Egret+Websocket)
呵大官人 发表于1年前
赢三张H5(PHP+Egret+Websocket)
  • 发表于 1年前
  • 阅读 2220
  • 收藏 6
  • 点赞 4
  • 评论 16

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 赢三张H5,php+egret开发,使用websocket协议.

简介

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

共有 人打赏支持
呵大官人
粉丝 110
博文 16
码字总数 14742
作品 1
评论 (16)
一路南漂
支持~~:smile:
pig250
关于fooking 的配置,聊天室部署通过,但是这个项目配置以后连接不上服务器,config.lua中修改了
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 需要修改什么?
你看看htdocs/api/getserver.php里面配置的服务器IP和端口跟config.lua中的IP和端口能不能对应上,,因为在连接服务器之前,需要请求这个接口获取服务器的。。另外那两个config文件是配置redis的,如果都是默认的,应该没啥问题。
kerwinz
怎么架设fooking。。。看了半天没看懂。。。
kerwinz
我把fooking下载下来之后,然后用命令行编译么?windows和linux都可以吧?编译的话是先cd到根目录然后么?然后需要怎么做。。。
呵大官人

引用来自“kerwinz”的评论

我把fooking下载下来之后,然后用命令行编译么?windows和linux都可以吧?编译的话是先cd到根目录然后么?然后需要怎么做。。。
目前只支持linux哦,windows下编译需要安装cygwin。cd到目录直接make就开始编译了。
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报错,说明协议文件定义有问题。
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报错,说明协议文件定义有问题。

引用来自“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

引用来自“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目录下的协议定义。。

引用来自“yipinzhe”的评论

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

引用来自“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)。这样就好了,,
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.

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

引用来自“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的路径
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,谢谢
×
呵大官人
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: