1、不是框架
2、不是扩展
3、不是Http server
fooking是一个分布式游戏网关,主要用于承载长连接,将客户端的数据包完整的转发给后端,后端服务处理完之后由fooking转发给客户端。
好像听起来有点像nginx+fpm?嗯!没错,如果是单纯的request/response,跟nginx类似;
但在游戏中经常出现要主动推数据给客户端,而没有request,比如:A发消息给B,B是没有request的,只有response.
嗯哼?就这些功能?听上也没什么吸引力啊。。
当然不只如此,他包括:
1、分布式网关配置,只需要简单配置就能动态添加网关,以提供更多的连接数量;
2、SESSION维持,每个连接会有唯一sessionid,后端只需要指定sessionid发送消息即可,不用关心这个连接在哪台机器上;
3、组播,N个用户加入到一组,只需要向组名发送消息即可,不用关心这个组有多少人(当然你非要自己去循环session发送我也阻止不了你);
4、服务器状态监控,可以观察到当前有多少组服务器,总共有多少连接,每台服务器上有多少连接,可以根据这些数据自定义一套规则来给客户端分配服务器;
5、客户端连接与断开事件通知;
6、后端无语言限制,遵循fastcgi协议即可;
7、自定义前端协议(使用lua)
1、节约硬件,游戏通常刚开区压力比较大,过段时间人少了就没多少压了,配置多台服务器完全可以循环开服;
2、后端无痛热更,例如php-fpm重启或者是热更代码,客户端完全没有察觉;
3、开发方便,跟开发web一样,只需将要发送的数据直接输出即可(需要添加Content-Length用于确定包大小,详见协议说明)
4、PHP错误能在log文件里一览无余,并且错误不会对fooking有任何影响
fooking由一个router与多个gateway组成,所有gateway都会去连接router,后端主动推送的消息由router派发给gateway,然后由gateway转发客户端.
request/response模式下不需要router干预,仅仅是gateway与backend(php-fpm)通信.
网关为什么会有协议?既然是消息转发,就必须将一个包完整的发到后端,而不是让后端来检测包是否完整;
协议分为两种,一种是前端协议,一种是后端协议
前端协议是指客户端与fooking的交互协议,这个很简单,32位int + data(这是默认的协议,也可以使用lua进行自定义协议处理,详细参见script.lua, 需要配置SCRIPT_FILE).
后端协议是使用Fastcgi,这就意味着,后端无所谓什么语言,只需要遵循fastcgi协议即可,我是phper,当然推荐使用fpm(使用hhvm也非常不错);
注: 后端返回的数据必须有Content-Length标识返回数据长度,否则一律视为不返回数据到客户端,
如果需要指定数据的偏移位置,需要使用Content-Offset,比如返回数据为abcdef, offset=3, length=2,那么客户端会收到de。(offset可以是负数)
在fooking目录下执行make即可,启动需要cd src
具体的配置请详见src/config.lua与src/router.lua
./fooking router.lua
./fooking config.lua
php游戏开发之泡泡堂
oschina介绍 http://www.oschina.net/p/fooking git 地址 http://git.oschina.net/scgywx/fooking
下午一面,能得到这个机会还是很惊喜的,但感觉自己大概率过不了,没有过实习,机器学习半吊子水平,就当做和面试官聊天吧,增长一点见识为以后去中小厂做准备,希望能和面试官好好聊聊 凉面分享 两个面试官(一个偏技术一个偏hr?),面试前10分钟蓝牙耳机出了问题,迫不得已用打游戏的头戴式耳机去面试了,md回头才发现全是杂音,面完感觉凉透了(大概时长30分钟) 自我介绍 技术相关面试(好像我菜了,没多的东西能
通过内推投的简历,因为自己大学专业就是交互设计,所以可能因为专业对口通过了简历筛选把。 第一轮电话面试: 1、首先让我做个剪短的自我介绍 在自我介绍的过程中我简短的讲了我的大学专业,还讲了两个项目经历跟主要负责的职责,还有一些兴趣爱好。 2、对我自我介绍的项目经历进行提问 我想这是为了核实项目的真实性吧,因为自己确实是做这块工作所以也答得很流畅。在大概讲完之后面试官对我的印象是确实有项目经验,然
游戏发布之前的准备 啊,这么快就已经到最后一步了? 恭喜,现在只要再做最后一些处理,你的游戏就可以发布了。 首先需要的是对游戏的菜单进行调整。 平时测试的时候,“调试”菜单栏可以打开后台,方便你查看游戏过程中发生的事,但你肯定不想玩家通过后台查看甚至任意修改角色好感度吧。 所以呢,把没用的菜单关掉是很重要的一步。 只要打开“界面设定-Config.tjs”就可以很简单地关掉不想要的菜单项,当然,关
在运行吉里吉里程序时、会出现游戏工程文件夹选择画面(译注:请试着点一下KAGeXpress文件夹下的krkr.eXe)。如果不希望出现文件夹选择画面,而是让吉里吉里自动读取游戏工程的话,可以使用以下的方法。 将游戏工程文件夹改名为 data 将游戏工程文件夹命名为 "data" ,并将文件夹和吉里吉里可执行文件 ( krkr.eXe ) 放在同一目录下,在吉里吉里起动的时候,就会自动执行这个游
第一部分测试常规八股 一道简单编程,求CPU占用最长时间。 复杂编程,吃豆子。 游戏场景用例设计 综合题(20分):日志处理。 总体来看,设计的很测试,符合测试试卷。整的挺好的,感觉是为测试专门设计的很不错。 345比较耗时间,建议先做4在做5最后3.如果是编程大佬可以直接做3。45的问题主要是要打很多字,题干比较长,读的累。当然3题干也蛮长的。过了20%,最后没AC,浪费了点时间没写完5,写了伪
投递一天内就接到hr电话,速度杠杠的 面试内容如下 一面hr电话面: 1.明确部门这段时间比较忙,基本每天都要加班到晚上9~10点,能否接受 2.询问实习时长及到岗时间 3.询问是否喜欢玩游戏 4.深挖简历(实习、项目经验等,了解运营能力 二面主管面: 1.自我介绍 2.面试官详细介绍工作内容及情况 3.提问问题:假设我所管理的社群内有参赛者不满意其参赛作品未获一等奖,在群里闹事投诉不满,我该如何