fooking 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
fooking 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 BSD
开发语言 C/C++
操作系统 Linux
软件类型 开源软件
所属分类 程序开发游戏开发包
开发厂商
地区 国产
提 交 者 呵大官人
适用人群 未知
收录时间 2014-12-23

软件简介

fooking

image

不是什么

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

启动router

./fooking router.lua

启动gateway

./fooking config.lua

example

php游戏开发之泡泡堂

http://my.oschina.net/scgywx/blog/356071

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (3)

加载中
非常棒的架构,简单实用。之前项目就跟我们后端提过类似这个的模型,非常方便只做过web的开发者转到手游后端。 fooking
2014/12/24 09:32
回复
举报
我书的读少,你别骗俺啊!我们的应用场景:N多的client,要与server保持长链接,client与server双向交互·现在我们遇到的问题就是:server不稳定(俺们水平有限),看了fooking说明,准备试下! fooking
2014/12/24 13:30
回复
举报
听起来就是很没有用的东西 fooking
2014/12/24 20:09
回复
举报
更多评论
发表了资讯
2015/08/28 00:00

fooking 0.1.0 发布,分布式网关服务器

fooking是一个分布式网关服务器,主要用于承载客户端连接,将客户端请求转发到后端逻辑服务器,然后把逻辑服务器返回的结果转发到客户端。他类似Nginx,使用Nginx + FastCGI Server(如:FPM, etc..)构建Web服务器,同时可以使用Fooking + FastCGI Server(如:FPM, etc..)构建Socket服务器. 特性 1 动态网关添加. 2 每个客...

14
46
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2015/07/07 13:07

PHP分组聊天室--fooking现实

PHP分组聊天室--fooking现实

0
2
发表于游戏开发专区
2014/12/09 21:30

分布式游戏网关--fooking

这个项目酝酿很久了,但是一直以来比较忙,加上游戏瘾比较大,所以也拖了蛮久时间才开发完第一个版本!主要是做一个分布式的游戏网关,负责消息的转发,项目地址: http://git.oschina.net/scgywx/fooking 不是什么 1、不是框架 2、不是扩展 3、不是Http server 是什么 fooking是一个分布式游戏网关,主要用于承载长连接,...

10
48
发表于软件架构专区
2015/06/10 17:22

fooking文档(不定期更新)

简介 fooking是一个分布式网关,其主要目的是用于承载客户端长连接,然后将接受的客户端数据以fastcgi协议转发给后端业务逻辑处理服务器,让后端服务真正独立的同时还无需关心扩展的问题,简单配置即可。 fooking服务包含两部分,一部分是gateway主要用于承载客户端链接、转发请求;另一部分是router,主要用于各gateway...

23
7
发表于服务端专区
2015/04/02 01:32

PHP分组聊天室--fooking现实

最近也是比较忙,公司打码,回家继续打,越忙越折腾! 一个不小心半夜一点了,花了一晚上时间终于把这个分组聊天室写完了,前两天刚把fooking的websocket协议加上,纯lua实现。 fooking的项目地址:http://git.oschina.net/scgywx/fooking 在线demo地址: http://182.254.135.131/chat/ 开发聊天室这基本是上每个搞socke...

13
67
发表于运维专区
2015/08/28 14:43

Go语言开发分布式聊天室

声明 我是一个刚学go语言的菜鸟,还没有资格谈论什么技术分享,只是为了展示fooking的实际应用,同时把我用go写的聊天室代码贴出来供大家消遣,如果有入不了各位法眼的代码,望轻喷。该聊天室基于fooking,而业务代码是采用Go + Fastcgi。 完整的源代码在 https://github.com/scgywx/fooking/blob/master/example/chat/g...

7
155
发表于开发技能专区
2014/12/15 00:15

PHP游戏开发之大家一起来玩泡泡堂

在fooking完成的第一版里面附带了一个简单的聊天室来说明了fooking的功能,这次利用周末两天写了一个稍微比聊天室复杂点的小游戏!能跑动,能放泡,能聊天,能控制死亡。演示地址:http://182.254.135.131/, 这游戏写的比较粗糙,没有考虑到网络不好的情况,可能会有拉扯现象,但是如果网络好,还是很流畅的。。上下左右...

8
29
发表于游戏开发专区
2016/10/12 22:30

赢三张H5(PHP+Egret+Websocket)

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

16
9
发表了博客
2014/12/28 18:33

OSChina 技术周刊第十五期——每周技术精粹集锦

每周技术抢先看,总有你想要的! 移动开发 【软件】移动基站数据分析 SnoopSnitch 【博客】android自动连接wifi——WifiManager 【资讯】OSC 安卓客户端全面改版 —— 新界面新体验 【资讯】Git@OSC 项目推荐 —— Android 日历控件 前端开发 【翻译】JavaScript 应用框架 Bearcat 【博客】基于HT的CSG功能构建HTML5的3...

0
7
发表了博客
2015/04/05 22:09

OSChina 技术周刊第二十八期 —— 每周技术精粹

每周技术抢先看,总有你想要的! 移动开发 【软件】RichEditor for Android 【软件】用 React 编写移动应用 React Native 【软件】iOS 图表控件 ios-charts 【博客】【iOS越狱开发】如何将应用打包成 .ipa 文件 前端开发 【翻译】加载 CSS 时不影响页面渲染 服务端开发/管理 【翻译】在 Linux 内核中诊断网络问题 【翻译...

0
8
发表于运维专区
2015/06/09 17:13

php长连接,奏是这么简单

说到长链接大家肯定不陌生,就是复用一个链接持续不断的进行数据交互,它不像那些一夜情似的服务,需要频繁的打开和关闭链接,效率低的同时还增加了业务的复杂度。在裆下很多互联网业务场景都需要长连接的支持,比如:游戏、聊天、信息推送等等等,今天我们就一步一步来揭秘php长连接的玩法。我相信任何一项技术的实施都...

49
364
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2016/05/13 17:44

./src/fooking config.lua 执行的时候遇到问题。

@IM鑫爷 你好,想跟你请教个问题: 我在编译成功以后,./src/fooking config.lua 执行的时候遇到问题。,以下是报错信息,还请能给个回复 root@vagrant-ubuntu-trusty:/home/vagrant/fooking# ./src/fooking config.lua *** buffer overflow detected ***: ./src/fooking terminated ======= Backtrace: ========= /lib/...

1
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
3 评论
178 收藏
分享
返回顶部
顶部