Firefly是免费、开源、稳定、快速扩展、能 “热更新”的分布式游戏服务器端框架,采用Python编写,基于Twisted框架开发。它包括了开发框架和数据库缓存服务等各种游戏服务器基础服务,节省大量游戏开发的工作时间,真正做到让使用者把精力放在游戏玩法逻辑上。用它可以搭建自定义的分布式架构,只需要修改相应的配置文件即可。
优势特性
采用单线程多进程架构,支持自定义的分布式架构;
方便的服务器扩展机制,可快速扩展服务器类型和数量;
与客户端采用TCP长连接,无需考虑粘包等问题;
封装数据缓存服务;
可实现实时热更新数据以及游戏逻辑,客户端玩家无感觉;
有几十个基础游戏玩法系统模块提供组装使用(v1.3.0提供);
框架介绍
management, firefly 是个多进程、分布式的游戏服务器。因此各游戏server(进程)的管理和扩展是firefly很重要的部分,框架通过抽象使服务器的扩展非常容易。
Network,客户端连接通信、server进程间的通信等构成了整个游戏框架的脉络,所有游戏流程都构建在这个脉络上。与客户端的通信采用的是请求/回应式的,所以受到的客户端的请求,服务端都会给出相应的回应,服务端也能主动的推送,广播给客户端消息。这些请求是基于指令号的请求。(例如定义101为登陆指令)server进程之间的通信时采用的异步回调的方式,这样就减少了的进程间通过网络通信中的时间消耗。
Data, 数据处理是网游的重要部分。在网游有大量的数据需要存储,需要更新,这使得数据库的读写效率成为服务器的最大的性能瓶颈。firefly的db处理能够将数据库表中的数据缓存到memcache中并能以对象的形式进行调用相应的对象方法对数据进行操作。可以在不同的进程中通过实例化相同的名称的缓存实例,得到同步的数据。并能将缓存对象中的数据写回数据库中。
框架思路
一个最基本的服务器就是一个在不停运行着的应用程序。在分布式游戏服务器中,我们需要的服务器具有的功能有,监听客户端的连接,监听其他服务进程的消息,连接其他的服务进程,有些需要有数据库连接和缓存服务。如下图
net connect 做客户端连接,root监听其他服务进程消息,node连接其他服务进程,db数据库,cache缓存。是否需要监听客户端连接,是否监听其他服务进程消息等这是都是可以在config.json中进行配置。包括各个服务器的名称以及各个服务器之间的连接关系。这样就可以自定义出自己的分布式架构。
Firefly团队:我们或有不足,但我们不停努力!
Chapter 1 简介 不懂后台的前端不是一个好美工! 目前的全部学习代码已经上传: https://github.com/chenee/firefly_study;后面的笔记会参考这份学习代码。 最近在看firefly的代码,想想不如精读一下,果断入门server编程吧。 我会分步post关于firefly的代码阅读和学习笔记。 首先,firefly是国人开源的server,非常值得推介。网
下面一一个典型的config.json的配置: { "master":{"rootport":9999,"webport":9998}, "servers":{ "testserver":{"netport":1000,"rootport":20001,"name":"gate","app":"app.apptest","log":"serverlog.log", "db":true,"mem
这段时间需要用firefly3399做深度学习相关的工作,配置环境也是相当的费神,这里先记录一下自己配置的过程,方便以后查看。 系统:firefly自带的xubuntu系统 一、安装依赖 1、gcc sudo apt-get install build-essential 2、numpy等相关的依赖包安装 sudo a
1. 总体介绍 主机平台:x64 ubuntu 16.04 LTS 本文档详细介绍rk3288 bsp开发细节,涵盖源码获取,编译生成,主要改动点等内容。 方便起见,首先罗列出所参考资料的站点(以下流程原理都可在下面链接找到更专业解释): rockchip芯片软硬件资料站点主页: http://opensource.rock-chips.com/wiki_Main_Page rockchip yo
复用 如何定义GPIO有哪些功能可以复用,在运行时又如何切换功能呢?以I2C4为例作简单的介绍。 查规格表可知,I2C4_SDA与I2C4_SCL的功能定义如下: #func0func1I2C4_SDA/GPIO1_B3gpio1b3i2c4_sdaI2C4_SCL/GPIO1_B4gpio1b4i2c4_scl 在kernel/arch/arm64/boot/dts/rockchip/rk339
昨天原计划学python一个星期,但学习起来,没想过会这么简单,而且最后的目标是FireFly其实方面也不用学习这么深,够用就好,不会的再查查书。 所有python一天搞定,今天来学习Twisted。出发 看了半天资料。感觉简单理解就好。因为毕竟不是专业服务端人员,先跳过。之后再回来啃
1.列表比较 list1 = [123] list2 = [234] list1 > list2 false list1 = [123,456] list2 = [234,123] list1 > list2 false(只比较第一个,只要有结果就结束了) 2.列表拓展可用 + 号 list1 = [123,456] list2 = [234] list3 = list1 + list2 list
SSD 128G的NVME 品牌为忆联 板子firefly的rk3399pro root@firefly:/nvmedir# root@firefly:/nvmedir# dd if=/dev/zero of=./test bs=200MB count=10 10+0 records in 10+0 records out 2000000000 bytes (2.0 GB, 1.9 GiB) c
firefly是一个追求高性能的应用程序框架,性能大幅超越spring3、struts2等 零依赖,仅仅依赖于jdk 精简、轻量、无侵入 core包含IOC、MVC、Interceptor等常用功能 使用简单,基于约定优于配置的思想,可完全使用Annotation方式 或 Annotation和XML混合方式进行配置
应各位Firefly开发者要求,提供了Firefly的在线一键安装包,Firefly已经上传到pypi。 以后部署Firefly可以通过终端指令,直接输入easy_install firefly 就能直接自动在线安装Firefly。 系统会自动检测Firefly的依赖的第三方库,并自动进行安装Firefly所依赖的第三方库。 # easy_install firefly 复制代码 需要您的服务器安
现在在公司,用的是Firefly进行源代码管理,这是个国产软件,好像在金融界比较流行。但是为什么,我不清楚。以前在学校里面用的是VSS,后来看过一点点粗浅的CVS资料,现在看Firefly,觉得有点概念上的区别。无论对错,先记下来。以后还可以慢慢研究。 以软件版本管理软件的控制方法来说,主要有两种: Lock-Modify-Unlock模式,就是VSS里面的checkout,编辑,然后再check
任务 CVS命令 Firefly命令 新建存储库 cvs –d <source repository directory> init hff rep create –h <hostname> –d <rep dir> <rep name> Firefly和CVS均支持多存储库。在cvs中用户需要使用 “cvs –f –allow-root=/rep1 –allow-root=/rep2 pserv
在学习研究的道路上难免有时会发现有更细节的分支需要学习。 晚上上完了思修,回了寝室甩了书包,便一股脑扑到firefly的学习中,(对于后来者,你需要知道的是firefly是一种服务器架构由九秒社区打造,直接度娘firefly 就有相关学习资料。)。看到了社区资源帖,很全,很郁闷。在学习firefly之前还需要学习python(python是巨蛇的意思,英语也是兴趣之
Firefly-RK3288开发板烧写教程 前言 本文介绍了如何将主机上的固件文件,通过 Micro USB OTG 线,烧录到开发板的闪存中。 升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。 准备工作 ?Firefly RK3288 开发板 ?固件 ?主机 ?良好的 Micro USB OTG 线 固件文件一般有两种: ?单个统一固件 update.img, 将启动加载器、参数和所
本文向大家介绍C++实现的分布式游戏服务端引擎KBEngine详解,包括了C++实现的分布式游戏服务端引擎KBEngine详解的使用技巧和注意事项,需要的朋友参考一下 KBEngine 是一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端。
我试图建立一个通用服务器总是在连接的客户端。 该体系结构由4个主要组件组成 有状态应用服务器 无状态网关服务器 客户排队 系统和经纪人 工艺流程 客户端连接到网关 我正在使用JavaNetty作为网关。appserver也是用Java编写的。 我很想说这个设计像Mongrel2,但我不能完全确定。我想说,这更符合城市飞艇氦边缘服务器的设计(http://urbanairship.com/blog/
JAGS 游戏服务器是一个开源的 Java / AS 3.0 的游戏服务器,支持多玩家、碰撞检测以及键盘事件等等。
二本鼠鼠学Java没出路。。 技术面 - 50min - 9.26 自我介绍 介绍一下你的项目经历 MySQL索引底层结构 Redis有哪些数据结构 Redis的持久化机制 学过其他语言吗(c++和go),说一下c++、go、Java的区别 LRU怎么实现 最短路径算法实现 JVM垃圾回收算法 手撕在一排数据中算出不重复数据的子集 TCP三次握手 你知道什么是SYN攻击吗 TCP四次挥手为什么是四
过年回上海裸辞出去玩了一个月,5月回来找的工作,正好现在有时间了,抽空写一下社招面经,有些已经忘记了。裸辞还是太冲动了,菜鸡不配gap,两年工作经验不应该随便裸辞,还是太年轻、太狂妄了。当年校招腾讯、祖龙、小米等等offer随便拿,以为社招还跟校招一样简简单单,结果现在只能去个小公司养老了。 巨人网络(球球大作战) golang游戏后端,线下1、2、3面一起的 一面 项目架构图 pb的底层实现结构
在开发我的在线游戏时,我试图了解更多关于安全的知识。 截获从服务器发送的数据包、使用某些软件修改数据包并将数据发送回服务器是否可能,以及有多困难? 下面是一个场景: 玩家与AI敌人进行战斗。一个玩家输掉了这场战斗,在战斗结束时,数据包被发送回服务器,记录发生的事情。是否可以在发送之前修改此数据包,并告诉服务器玩家已经赢得了这场战斗?如何读取并修改这些数据? 是否有可能说玩家与1个敌人进行了一场战斗
2023/5/10 面了30分钟。。。(感觉寄) 脑子有点糊涂,只记得一部分了 先是自我介绍,然后问问之前实习情况 1、C++有什么情况会导致宕机? 2、数组越界为什么会导致宕机? 3、介绍下虚函数 4、智能指针 5、select和epoll的区别,为什么使用epoll? 6、迷宫,寻路算法(没看过之前。。。);然后迷宫有环怎么办? 7、客户端输入名字的前部分,如有玩家ABC,当客户端输入A时,会
全程35分钟! 1.自我介绍 2.选你最熟悉的项目深挖 3.tcp粘包,如何解决? 4.怎么自己设计数据库 5.自己设计过那些小工具?日志系统,简易shell 6.STL是线程安全的吗? 7.哈希冲突,红黑树 8.说一下线程安全 9.负载均衡的算法了解哪些? 10.游戏寻路算法了解吗?答了回溯 11.数学三维和二维两点之间的距离 12.实习经历,写过哪些算法? 13.为什么游戏服务器不用数据库?