查看原文
其他

极致性能的Java服务器框架

TJ TJ君 2022-05-12

大家好,我是TJ

关注TJ君,回复“武功秘籍”免费获取计算机宝典书籍

TJ君将之前发过的各种项目及工具进行了整理,收录到了GitHub项目,欢迎各位小伙伴光临Star,地址如下:https://github.com/Wechat-TJ/TJ-WORLD-FORU

今天TJ君决定给大家推荐语一个Java服务器框架,它的特点就是,性能为王! 让我们一起来看下这款为性能而生的Java服务器框架,zfoo

zfoo,作为一个追求性能的框架,有几下几个特点:

  • 极致性能,天生异步,Actor设计思想,无锁化设计,基于Spring的MVC式用法的万能RPC框架
  • 极致序列化,原生集成目前二进制序列化和反序列化速度最快的 zfoo protocol 作为网络通讯协议
  • 高可拓展性,单台服务器部署,微服务部署,注册中心加集群部署,网关加集群部署,随意搭配
  • 上能做游戏服务器框架,下能做应用网站服务器框架

同时,拥有完善的工作开发流程,可以满足:

  • 普通java项目,spring项目,分布式项目,容器项目, 不停机完美热更新代码
  • Excel配置自动映射和解析,在线不停机热更新Excel配置
  • MongoDB的自动映射框架
  • 事件总线
  • 时间任务调度
  • 内置在程序里的轻量级cpu,内存,硬盘,网络监控, 无需代码和额外工具,解放运维生产力

相比较常见的框架,TJ君觉得,zfoo对有以下需求的小伙伴是更加适合的:

  • 性能需求极高的项目,如网站和游戏服务器框架,单服滚服,全球服,直播聊天,IM系统,实时推送
  • 节省研发成本的项目,如想节省,开发,部署,运维成本
  • 适合作为 Godot,Unity,Cocos,Webgl,H5 的后端基础框架,网络通信协议支持 tcp udp websocket http
  • 语言支持 Java Javascript C# Lua GDScript,可以轻易实现跨平台
  • 喜欢 KISS法则 的项目 ,简单的配置,优雅的代码

举几个代码中的例子:

1、可能是性能最好的Java序列化和反序列化库

// zfoo协议注册,只能初始化一次
ProtocolManager.initProtocol(Set.of(ComplexObject.class, ObjectA.class, ObjectB.class));

// 序列化
ProtocolManager.write(byteBuf, complexObject);

// 反序列化
var packet = ProtocolManager.read(byteBuf);

2、可能是速度最快的RPC框架,支持 tcp udp websocket http

// 服务提供者,只需要在方法上加个注解,则自动注册接口
@PacketReceiver
public void atUserInfoAsk(Session session, UserInfoAsk ask) {
}

// 消费者,同步请求远程用户信息,会阻塞当前的线程,慎重考虑使用同步请求
var userInfoAsk = UserInfoAsk.valueOf(userId);
var answer = NetContext.getCosumer().syncAsk(userInfoAsk, UserInfoAnswer.class, userId).packet();

// 消费者,异步请求远程用户信息,不会柱塞当前的线程,异步请求成功过后依然会在userId指定的线程执行逻辑
NetContext.getCosumer()
                    .asyncAsk(userInfoAsk, UserInfoAnswer.class, userId)
                    .whenComplete(sm -> 
{
                        // do something
                    );

3、热更新代码,不需要停止服务器,不需要额外的任何配置,一行代码开启热更新

// 传入需要更新的class文件
HotSwapUtils.hotswapClass(bytes);

喜欢追求极致性能的小伙伴,还不赶紧来一试?

点击下方卡片,关注公众号“TJ君

回复“性能2022”,获取仓库地址

关注我,每天了解一个牛x、好用、有趣的东东


往期推荐


30秒就能学会一个的JavaScript代码片段大合集

程序员延寿指南,活着才有输出

程序猿做饭指南之有啥做啥!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存