文档章节

分布式游戏网关--fooking

呵大官人
 呵大官人
发布于 2014/12/09 21:30
字数 1016
阅读 2059
收藏 48
点赞 1
评论 10

这个项目酝酿很久了,但是一直以来比较忙,加上游戏瘾比较大,所以也拖了蛮久时间才开发完第一个版本!主要是做一个分布式的游戏网关,负责消息的转发,项目地址: http://git.oschina.net/scgywx/fooking

不是什么

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协议即可;

优势

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进行自定义协议).
后端协议是使用Fastcgi,这就意味着,后端无所谓什么语言,只需要遵循fastcgi协议即可,我是phper,当然推荐使用fpm;
注: 后端返回的数据必须有Content-Length标识返回数据长度,否则一律视为不返回数据到客户端,
另外数据是由后后向前切取,比如输出内容为abcdef,而Content-Length: 3,那么客户端会收到def..

编译

在fooking目录下执行make即可,启动需要cd src

配置

具体的配置请详见src/config.lua与src/router.lua

启动router

./fooking router.lua

启动gateway

./fooking config.lua

example

已做了个简单的聊天室,位于example/chat
使用方法:
1、使用nginx或者apache将目录指向example/chat目录,并修改index.html的服务器IP与端口(需要访问index.html和chat.swf)
2、运行python flash.py(flash的安全沙箱,因为客户端是使用flash socket)
3、配置router.lua和config.lua,然后启动router和gateway
4、访问localhost/index.html


© 著作权归作者所有

共有 人打赏支持
呵大官人

呵大官人

粉丝 118
博文 17
码字总数 15799
作品 1
普陀
加载中

评论(10)

godsoul1986
godsoul1986
专程来膜拜的!42
W
WhoAmMe
三金锅太厉害了
合肥第一页
大爱,三金,聊天室走起啊。
呵大官人
呵大官人

引用来自“回去干活”的评论

不过有个优点,就是fastcgi那块代码的确是热更,最多只能做做简单的业务逻辑,复杂的业务逻辑只能发送后续的服务,然后由服务去计算计时任务发送给客户端了.
这样会不会过于复杂了.
这个其实跟复杂不复杂没有多大关系,,响应式有时候也需要复杂,这要看业务需求!只是多数情况下耗时的操作都放在服务端让别的持久进程来处理,然后发给用户。
呵大官人
呵大官人

引用来自“回去干活”的评论

法想是不错,不过后端通常有很多持久性的服务要运行,以fastcgi的生命周期来看最多只能http那样做应答阿.
除非后端用cli的模式运行诺干个服务,服务触发事件,向你的gateway发数据,然后你的gateway再发给客户端..
是这个意思吧?
对的,你理解没错!其实这里就包含两种模式,一种是由客户端来触发,像http那样,另一种由服务端触发,需要持久的服务来做!
回去干活
回去干活
不过有个优点,就是fastcgi那块代码的确是热更,最多只能做做简单的业务逻辑,复杂的业务逻辑只能发送后续的服务,然后由服务去计算计时任务发送给客户端了.
这样会不会过于复杂了.
回去干活
回去干活
法想是不错,不过后端通常有很多持久性的服务要运行,以fastcgi的生命周期来看最多只能http那样做应答阿.
除非后端用cli的模式运行诺干个服务,服务触发事件,向你的gateway发数据,然后你的gateway再发给客户端..
是这个意思吧?
呵大官人
呵大官人

引用来自“吐槽的达达仔”的评论

这个跟代理服务器的架构好像,没弄明白跟代理服务器的差别。还是说,代理服务器也能做到这样的功能??
代理服务器只负责消息转发,也就是通常的req/rep模式;至于消息的完整性,session的维持,还有后端主动推送消息给指定客户端,组播等功能都是没有的。当然要使用多个开源软件搭建一套也不是不行!
吐槽的达达仔
吐槽的达达仔
这个跟代理服务器的架构好像,没弄明白跟代理服务器的差别。还是说,代理服务器也能做到这样的功能??
朱宏青
朱宏青
有点兴趣
先mark一下
分布式游戏网关--fooking

fooking 不是什么 1、不是框架 2、不是扩展 3、不是Http server 是什么 fooking是一个分布式游戏网关,主要用于承载长连接,将客户端的数据包完整的转发给后端,后端服务处理完之后由fooking...

呵大官人
2014/12/23
8.4K
3
Go语言开发分布式聊天室

声明 我是一个刚学go语言的菜鸟,还没有资格谈论什么技术分享,只是为了展示fooking的实际应用,同时把我用go写的聊天室代码贴出来供大家消遣,如果有入不了各位法眼的代码,望轻喷。该聊天室...

呵大官人
2015/08/28
5.1K
6
呵大官人/fooking

fooking是一个分布式网关服务器,主要用于承载客户端连接,将客户端请求转发到后端逻辑服务器,然后把逻辑服务器返回的结果转发到客户端. 他类似Nginx,使用Nginx + FastCGI Server(如:FPM...

呵大官人
2014/12/10
0
0
fooking 0.1.0 发布,分布式网关服务器

fooking是一个分布式网关服务器,主要用于承载客户端连接,将客户端请求转发到后端逻辑服务器,然后把逻辑服务器返回的结果转发到客户端。他类似Nginx,使用Nginx + FastCGI Server(如:FPM...

呵大官人
2015/08/28
2.3K
14
PHP游戏开发之大家一起来玩泡泡堂

在fooking完成的第一版里面附带了一个简单的聊天室来说明了fooking的功能,这次利用周末两天写了一个稍微比聊天室复杂点的小游戏!能跑动,能放泡,能聊天,能控制死亡。演示地址:http://18...

呵大官人
2014/12/15
0
5
OSChina 技术周刊第十五期——每周技术精粹集锦

每周技术抢先看,总有你想要的! 移动开发 【软件】移动基站数据分析 SnoopSnitch 【博客】android自动连接wifi——WifiManager 【资讯】OSC 安卓客户端全面改版 —— 新界面新体验 【资讯】...

OSC编辑部
2014/12/28
1K
0
OSChina 技术周刊第十三期 —— 每周技术精粹

每周技术抢先看,总有你想要的! 移动开发 【翻译】appcompat v21: 让 Android 5.0 前的设备支持 Material Design... 【软件】可直接商用的《动漫之家》APP 开源,基于 CrossApp! 【博客】i...

OSC编辑部
2014/12/14
4.4K
2
OSChina 技术周刊第二十八期 —— 用 React 编写移动应用

每周技术抢先看,总有你想要的! 移动开发 【软件】RichEditor for Android 【软件】用 React 编写移动应用 React Native 【软件】iOS 图表控件 ios-charts 【博客】iOS 越狱开发——如何将应...

OSC编辑部
2015/04/05
1K
0
OSChina 技术周刊第二十八期 —— 每周技术精粹

每周技术抢先看,总有你想要的! 移动开发 【软件】RichEditor for Android 【软件】用 React 编写移动应用 React Native 【软件】iOS 图表控件 ios-charts 【博客】【iOS越狱开发】如何将应...

OSC编辑部
2015/04/05
0
0
OSChina 开源周刊 50 期,每周技术精粹

本周开源资讯 七大科技公司联手设计下一代开源视频格式 jQuery 基金会和 Dojo 基金会合并:Open Web Eclipse 寻求捐赠用于 IDE 等项目的开发 Angular 2.0 调查:43% 选择 Webstorm 编辑器 软...

OSC编辑部
2015/09/04
4.9K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sklearn学习笔记之简单线性回归

简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项。线性回归的思想其实就是解一组方程,得到...

wangxuwei
3分钟前
0
0
feign之动态interceptor(二)

背景 上文提到了按照不同的feignClient可以根据多个不同的key来进行多个不同的bean的配置 那么我们如何完成多个interceptor的配置呢? 分析 我们刚提到多个配置的玄机就在FeignClientProper...

Mr_Qi
5分钟前
1
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
30分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
50分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
56分钟前
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
2
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部