MIT licensed

示例在github可见,链接

最新

开发中

dfactor

dfactor 是一个基于actor模型的消息处理框架,充分利用多核处理器,平衡业务负载,可参考 erlang

dfactor 使用java编写,天生多平台支持,开发调试方便

dfactor 提供丰富的组件支持,涵盖通信,编解码,rpc,集群组网等等

dfactor 提供易用的api,上手简单,编写少量代码即可快速构建从通信层到存储层的服务端程序

dfactor 示例丰富,持续增加各种类型的服务器开发示例,简单业务做些修改就可使用

dfactor 能做什么?

dfactor 本质是一个actor模型的消息处理框架,加上服务器开发常用的网络通信,定时任务,rpc等 功能,原则上说可以用于任何想充分利用多核性能的业务模型, 常见的比如mmorpg, moba, rts, slg, 卡牌棋牌等类型游戏,或者作为服务端中间件开发的基础组件

dfactor 有哪些特性?

快速开始

启动一个简单的http-echo服务器

net.doHttpServer(8080, new CbHttpServer() {
    @Override
    public int onHttpRequest(Object msg) {
        DFHttpSvrReq req = (DFHttpSvrReq) msg;
        //response
        req.response("echo from server").send();
        return MSG_AUTO_RELEASE;
    }
    ...             
});

几行代码完成HTTP服务器启动,本例代码

性能

TreeTask 百万级actor压力测试

树状actor压力测试,从根节点开始依次创建 6 层深的树,每一层的节点数量为 10

每次任务从根节点开始,向下请求,到达最底层节点时,向上返回结果消息,直到到达根节点

默认树深度为6,每层节点数为10,总共创建 1111111(N) 个actor

一次消息请求,所有子节点都会收到一次请求一次响应(最底层只收到一次请求), 每个节点收到请求和收到响应都会调用_doTask,模拟业务逻辑的消耗(数组的随机打乱+排序)

使用 jvisualvm 观察程序运行时线程和gc情况,如果出现fullGC,需增加jvm分配内存

测试机配置: Intel [email protected]

一次任务共200多万次消息调用,无逻辑负载(注释_doTask)情况下,平均耗时600ms左右, 有逻辑负载(每个actor每次收到消息对30个元素的队列随机打乱和排序)情况下,平均耗时1800ms左右

测试结果:

控制台输出

控制台输出

线程使用情况

线程使用情况

可以做下试验:

将_doTask()内实现注释掉,观察框架任务调度本身的消耗, 调整启动参数的逻辑线程数, 观察只有任务调度消耗和包含了逻辑处理消耗时,不同逻辑线程数下的性能

示例

Startup  快速启动一个dfactor示例

Timeout 计时器使用示例

Schedule 定时任务使用示例

ExitActor 退出actor示例

Shutdown 关闭dfactor示例

ActorConn actor间通信示例

TomAndJerry 多actor通信示例(猫捉老鼠游戏)

BlockActor block类型actor使用示例(适用数据库操作等io场景)

TcpTest TCP服务端客户端通信示例

TcpCustomDecAndEnc TCP自定义消息编解码器示例

WebsocketServer WebSocket服务端示例

SimpleHttpServer 简单的HTTP服务示例

HttpServerDispatcher 充分利用多cpu处理HTTP业务的示例

HttpsServer HTTPS服务器示例

HttpClient HTTP请求外部服务器示例

RedisTest 使用io线程异步操作Redis示例

MysqlTest 使用io线程异步操作Mysql示例

MongodbTest 使用io线程异步操作Mongodb示例

CallHere 利用异步回调机制,在一个actor中编写另一个actor业务代码的示例

CallHereBlock 利用异步回调机制+框架提供的BlockActor,简化io操作代码,在业务actor中编写io操作代码

StartAsDaemon daemon模式启动示例,加载外部jar执行逻辑的示例,方便部署和模块解耦 测试外部jar文件下载

参照CallHereCallHereBlock,可改写 RedisTest, MysqlTest, MongodbTest 等例子,实现在业务actor里编写阻塞业务代码,增加代码可读性可维护性

ClusterSimple 集群使用入门示例

RpcLocal 本地actor间rpc调用示例

RpcCluster 集群内结点间rpc调用示例

ClusterParam 集群间通信(包括rpc)支持多种消息格式的示例

ClusterBroadcast 集群内广播示例

ClusterNodeEvent 监听集群内结点事件示例

FAQ

后续计划

社区&支持

QQ群:726932841

dfactor 开发哲学