最近研究了两个框架,都是类似于actor模型的实现,用于游戏后端开发领域非常方便。
skynet/lua是游戏界成熟知名的方案,但其本身并没有任何业务逻辑耦合,只提供了基本功能,使用灵活。
vert.x是Java web开发领域的高并发方案,初衷是jvm上的node.js。它也支持tcp server,所以也可以用于游戏领域开发。
将它们的特性做了以下对比:
vert.x | skynet/lua | |
---|---|---|
程序语言优势 | Java语言的优势。强类型、速度快、可维护性好 | lua语法简单 |
actor模型 | verticle可以相互发消息,可以随意新增,线程池执行多个verticle,单个verticle的资源少于一个线程(1M) | skynet中一个service都是一个lua vm,可以相互发消息,可以随意新增,内存消耗约1M(取决于加载的类库多少) |
actor通信方式 | vert.x利用event bus通信,包括点对点无回应、点对点请求回应、订阅发布三种模式 | skynet中service之间通信只有点对点无回应、点对点请求回应 |
actor通信的请求响应模式 |