{"id":15170955,"url":"https://github.com/lostsky3000/dfactor","last_synced_at":"2025-10-25T21:31:41.253Z","repository":{"id":57721155,"uuid":"130033012","full_name":"lostsky3000/dfactor","owner":"lostsky3000","description":"A lightweight server framework in java，一个用java编写的多核服务端开发框架","archived":false,"fork":false,"pushed_at":"2018-07-04T02:44:14.000Z","size":816,"stargazers_count":36,"open_issues_count":0,"forks_count":12,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-31T10:36:11.200Z","etag":null,"topics":["actor","cluster","erlang","game","java","mmorpg","rpc","server","ssl","websocket"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lostsky3000.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-04-18T08:51:08.000Z","updated_at":"2024-05-13T09:58:51.000Z","dependencies_parsed_at":"2022-09-04T18:20:11.694Z","dependency_job_id":null,"html_url":"https://github.com/lostsky3000/dfactor","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostsky3000%2Fdfactor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostsky3000%2Fdfactor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostsky3000%2Fdfactor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostsky3000%2Fdfactor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lostsky3000","download_url":"https://codeload.github.com/lostsky3000/dfactor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238212407,"owners_count":19434955,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actor","cluster","erlang","game","java","mmorpg","rpc","server","ssl","websocket"],"created_at":"2024-09-27T08:42:16.814Z","updated_at":"2025-10-25T21:31:35.938Z","avatar_url":"https://github.com/lostsky3000.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n\n示例在github可见，[链接](https://github.com/lostsky3000/dfactor)\n\n# 最新\n\n- 监听集群内结点事件api  [示例](src/test/java/fun/lib/actor/example/ClusterNodeEvent.java)\n\n- 集群内广播功能 [示例](src/test/java/fun/lib/actor/example/ClusterBroadcast.java)\n\n- 集群间通信(包括rpc)多种序列化格式支持,String,Json,byte[],ByteBuf,自定义序列化对象  [示例](src/test/java/fun/lib/actor/example/ClusterParam.java)\n\n- 增加集群内结点间rpc调用 [示例](src/test/java/fun/lib/actor/example/RpcCluster.java)， 本地actor间rpc调用 [示例](src/test/java/fun/lib/actor/example/RpcLocal.java)\n\n- 集群功能上线，去中心化自动组网，集群内结点互相发现互相通信  [入门示例](src/test/java/fun/lib/actor/example/ClusterSimple.java)\n\n## 开发中\n\n- js脚本开发支持\n\n\n# dfactor\n\ndfactor 是一个基于actor模型的消息处理框架，充分利用多核处理器，平衡业务负载，可参考 erlang\n\ndfactor 使用java编写，天生多平台支持，开发调试方便\n\ndfactor 提供丰富的组件支持，涵盖通信，编解码，rpc，集群组网等等\n\ndfactor 提供易用的api，上手简单，编写少量代码即可快速构建从通信层到存储层的服务端程序\n\ndfactor 示例丰富，持续增加各种类型的服务器开发示例，简单业务做些修改就可使用\n\n\n## dfactor 能做什么?\n\ndfactor 本质是一个actor模型的消息处理框架，加上服务器开发常用的网络通信，定时任务，rpc等\n功能，原则上说可以用于任何想充分利用多核性能的业务模型，\n常见的比如mmorpg, moba, rts, slg, 卡牌棋牌等类型游戏，或者作为服务端中间件开发的基础组件\n\n\n## dfactor 有哪些特性?\n\n- 充分利用多核处理器性能优势\n- TCP, HTTP, HTTPS, UDP, WebSocket多协议支持，快速搭建通信层\n- 通信层使用netty，高性能网络io的保证\n- 集群功能支持，自动组网，结点自动发现，互相通信\n- 支持集群内结点之前rpc通信，本地actor间rpc通信\n- io和业务分离模型，使业务逻辑计算不受io瓶颈制约，达到最大效能\n- 内置服务器开发常用模块，如计时器，定时任务等\n- 开发接口简单易用，示例丰富，少量代码快速搭建模型\n- 内置redis, mysql, mongoDb 客户端驱动，配合专门io线程使用，实现异步操作数据库及缓存\n- 可 daemon 方式启动，spi模式运行，加载外部 jar 文件实现逻辑快速部署和模块解耦 [示例](src/test/java/fun/lib/actor/example/StartAsDaemon.java)\n\n\n\n## 快速开始\n\n启动一个简单的http-echo服务器\n```java\nnet.doHttpServer(8080, new CbHttpServer() {\n\t@Override\n\tpublic int onHttpRequest(Object msg) {\n\t\tDFHttpSvrReq req = (DFHttpSvrReq) msg;\n\t\t//response\n\t\treq.response(\"echo from server\").send();\n\t\treturn MSG_AUTO_RELEASE;\n\t}\n\t...\t\t\t\t\n});\n```\n几行代码完成HTTP服务器启动，[本例代码](src/test/java/fun/lib/actor/example/SimpleHttpServer.java)\n\n\n## 性能\n\n[TreeTask](src/test/java/fun/lib/actor/benchmark/TreeTask.java)  百万级actor压力测试\n\n树状actor压力测试，从根节点开始依次创建 6 层深的树，每一层的节点数量为 10\n\n每次任务从根节点开始，向下请求，到达最底层节点时，向上返回结果消息，直到到达根节点\n\n默认树深度为6，每层节点数为10，总共创建 1111111(N) 个actor\n\n一次消息请求，所有子节点都会收到一次请求一次响应(最底层只收到一次请求)，\n每个节点收到请求和收到响应都会调用_doTask，模拟业务逻辑的消耗(数组的随机打乱+排序)\n\n\n使用 jvisualvm 观察程序运行时线程和gc情况，如果出现fullGC，需增加jvm分配内存\n\n\n测试机配置： Intel i5-7500@3.4GHz\n\n一次任务共200多万次消息调用,无逻辑负载(注释_doTask)情况下，平均耗时600ms左右，\n有逻辑负载(每个actor每次收到消息对30个元素的队列随机打乱和排序)情况下，平均耗时1800ms左右\n\n测试结果：\n\n控制台输出 \n\n![控制台输出](https://github.com/lostsky3000/dfactor/raw/master/assets/treetask_console.png)\n\n线程使用情况 \n\n![线程使用情况](https://github.com/lostsky3000/dfactor/raw/master/assets/treetask_thread.png)\n\n\n\n可以做下试验：\n\n将_doTask()内实现注释掉，观察框架任务调度本身的消耗，\n调整启动参数的逻辑线程数，\n观察只有任务调度消耗和包含了逻辑处理消耗时，不同逻辑线程数下的性能\n\n\n## 示例\n\n[Startup](src/test/java/fun/lib/actor/example/Startup.java)  快速启动一个dfactor示例\n\n[Timeout](src/test/java/fun/lib/actor/example/Timeout.java)  计时器使用示例\n\n[Schedule](src/test/java/fun/lib/actor/example/Schedule.java)  定时任务使用示例\n\n[ExitActor](src/test/java/fun/lib/actor/example/ExitActor.java)  退出actor示例\n\n[Shutdown](src/test/java/fun/lib/actor/example/Shutdown.java)  关闭dfactor示例\n\n[ActorConn](src/test/java/fun/lib/actor/example/ActorConn.java) actor间通信示例\n\n[TomAndJerry](src/test/java/fun/lib/actor/example/TomAndJerry.java)  多actor通信示例(猫捉老鼠游戏)\n\n[BlockActor](src/test/java/fun/lib/actor/example/BlockActor.java)  block类型actor使用示例(适用数据库操作等io场景)\n\n[TcpTest](src/test/java/fun/lib/actor/example/TcpTest.java)  TCP服务端客户端通信示例\n\n[TcpCustomDecAndEnc](src/test/java/fun/lib/actor/example/TcpCustomDecAndEnc.java)  TCP自定义消息编解码器示例\n\n[WebsocketServer](src/test/java/fun/lib/actor/example/WebsocketServer.java)  WebSocket服务端示例\n\n[SimpleHttpServer](src/test/java/fun/lib/actor/example/SimpleHttpServer.java)  简单的HTTP服务示例\n\n[HttpServerDispatcher](src/test/java/fun/lib/actor/example/HttpServerDispatcher.java)  充分利用多cpu处理HTTP业务的示例\n\n[HttpsServer](src/test/java/fun/lib/actor/example/HttpsServer.java) HTTPS服务器示例\n\n[HttpClient](src/test/java/fun/lib/actor/example/HttpClient.java) HTTP请求外部服务器示例\n\n[RedisTest](src/test/java/fun/lib/actor/example/RedisTest.java) 使用io线程异步操作Redis示例\n\n[MysqlTest](src/test/java/fun/lib/actor/example/MysqlTest.java) 使用io线程异步操作Mysql示例\n\n[MongodbTest](src/test/java/fun/lib/actor/example/MongodbTest.java) 使用io线程异步操作Mongodb示例\n\n[CallHere](src/test/java/fun/lib/actor/example/CallHere.java) 利用异步回调机制，在一个actor中编写另一个actor业务代码的示例\n\n[CallHereBlock](src/test/java/fun/lib/actor/example/CallHereBlock.java) 利用异步回调机制+框架提供的BlockActor，简化io操作代码，在业务actor中编写io操作代码\n\n[StartAsDaemon](src/test/java/fun/lib/actor/example/StartAsDaemon.java) daemon模式启动示例，加载外部jar执行逻辑的示例，方便部署和模块解耦\n[测试外部jar文件下载](spi.jar)\n\n\n参照[CallHere](src/test/java/fun/lib/actor/example/CallHere.java)和\n[CallHereBlock](src/test/java/fun/lib/actor/example/CallHereBlock.java)，可改写 \n[RedisTest](src/test/java/fun/lib/actor/example/RedisTest.java), \n[MysqlTest](src/test/java/fun/lib/actor/example/MysqlTest.java), \n[MongodbTest](src/test/java/fun/lib/actor/example/MongodbTest.java) 等例子，实现在业务actor里编写阻塞业务代码，增加代码可读性可维护性\n\n[ClusterSimple](src/test/java/fun/lib/actor/example/ClusterSimple.java)  集群使用入门示例\n\n[RpcLocal](src/test/java/fun/lib/actor/example/RpcLocal.java)  本地actor间rpc调用示例\n\n[RpcCluster](src/test/java/fun/lib/actor/example/RpcCluster.java)  集群内结点间rpc调用示例\n\n[ClusterParam](src/test/java/fun/lib/actor/example/ClusterParam.java)  集群间通信(包括rpc)支持多种消息格式的示例\n\n[ClusterBroadcast](src/test/java/fun/lib/actor/example/ClusterBroadcast.java)  集群内广播示例\n\n[ClusterNodeEvent](src/test/java/fun/lib/actor/example/ClusterNodeEvent.java)  监听集群内结点事件示例\n\n\n## FAQ\n\n\n\n## 后续计划\n\n- 增加常用服务端业务示例，如房间类型游戏等等\n\n\n## 社区\u0026支持\n\nQQ群：726932841\n\n\n\n## dfactor 开发哲学\n\n- 尽量用dfactor实现所有需求\n- 用，不要学\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostsky3000%2Fdfactor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flostsky3000%2Fdfactor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostsky3000%2Fdfactor/lists"}