A lightweight server framework in java,一个用java编写的多核服务端开发框架
示例在github可见,链接
监听集群内结点事件api 示例
集群内广播功能 示例
集群间通信(包括rpc)多种序列化格式支持,String,Json,byte[],ByteBuf,自定义序列化对象 示例
集群功能上线,去中心化自动组网,集群内结点互相发现互相通信 入门示例
dfactor 是一个基于actor模型的消息处理框架,充分利用多核处理器,平衡业务负载,可参考 erlang
dfactor 使用java编写,天生多平台支持,开发调试方便
dfactor 提供丰富的组件支持,涵盖通信,编解码,rpc,集群组网等等
dfactor 提供易用的api,上手简单,编写少量代码即可快速构建从通信层到存储层的服务端程序
dfactor 示例丰富,持续增加各种类型的服务器开发示例,简单业务做些修改就可使用
dfactor 本质是一个actor模型的消息处理框架,加上服务器开发常用的网络通信,定时任务,rpc等 功能,原则上说可以用于任何想充分利用多核性能的业务模型, 常见的比如mmorpg, moba, rts, slg, 卡牌棋牌等类型游戏,或者作为服务端中间件开发的基础组件
启动一个简单的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文件下载
参照CallHere和 CallHereBlock,可改写 RedisTest, MysqlTest, MongodbTest 等例子,实现在业务actor里编写阻塞业务代码,增加代码可读性可维护性
ClusterSimple 集群使用入门示例
RpcLocal 本地actor间rpc调用示例
RpcCluster 集群内结点间rpc调用示例
ClusterParam 集群间通信(包括rpc)支持多种消息格式的示例
ClusterBroadcast 集群内广播示例
ClusterNodeEvent 监听集群内结点事件示例
QQ群:726932841