基于 TCP 与领域事件的 kaka-rpc 2.0.0 正式发布


基于Netty TCP与kaka-core领域事件的轻量级RPC框架,相比其它使用各种繁杂设计模式的框架,本框架仅10多个类实现,可谓是极简编码。

  • 基础通信
    • 事件驱动
    • 自定义心跳协议或基于rpc调用的心跳处理
    • 断线重连
    • 同步、future异步、callback回调多种rpc调用模式
    • 超时控制
    • 自定义数据协议扩展领域事件
    • 登录鉴权
    • 基础数据类型在满足通信协议的要求下支持任意程序语言调用
  • 集群部署
    • 方案一:Nginx负载均衡
    • 方案二:自定义负载均衡,基于一致性哈希算法,亦可使用心跳轮询基于连接量的动态权重负载均衡
  • 性能强劲
    • 调用远程接口方法,顺序执行1000000次,耗时78秒,平均每秒12800次左右,相比其它基于Http协议的RPC框架,性能提升明显
    • 异步回调模式,每秒60000次左右
    • 以上性能数据均在 win11 i5-12400 16GB内存 IDEA 下运行产生

以下为部分示例程序,具体示例请参看源码test目录

final CountDownLatch latch = new CountDownLatch(1);
InetSocketAddress address = new InetSocketAddress("127.0.0.1", 7777);
NettyTcpClient client = new NettyTcpClient(address, 3, 7, 2, 2) {

@Override
protected void ping() {
//发送自定义心跳包
ChannelHandlerContext ctx = this.getChannelHandlerContext();
if (ctx == null) return;
ByteBuf buf = ctx.alloc().buffer(4); //标准包体结构 int协议号+协议内容
buf.writeInt(Integer.parseInt(MyOpCode.heart_beat));
ctx.writeAndFlush(buf);
// //如下方式亦可,但服务器必须进行逻辑处理并返回数据,否则将造成client调用端数据积压,且积压数据仅能通过超时自动清除。
////异步回调方式发送心跳包
//this.execRemotingLogic(MyOpCode.heart_beat, 4, (res, e) -> {
//if (e != null) {
//return;
//}
//System.out.println("异步获取心跳数据>>> " + res);
//});
}

@Override
protected void afterConnected() {
latch.countDown();
}

@Override
protected void afterDisconnect() {

}
};
client.connect();
latch.await();

//RPC远程领域事件处理,并同步获取执行结果,服务端请参看领域事件处理器 com.test.server.DemoLogic1Handler
int result = client.execRemotingLogic("demo_logic1", 3, new Object[]{1, 2, 3});
System.out.println("同步获取远程结果>>> "+result);
//RPC远程领域事件处理,并异步回调获取结果,服务端请参看领域事件处理器 com.test.server.DemoLogic2Handler
client.execRemotingLogic("demo_logic2",(res, e) ->{
if(e !=null){
//处理异常
return;
}
System.out.println("异步回调获取结果>>> "+res);
},100);
//RPC公共接口方法调用,服务端接口实现请参看 com.test.server.DemoServiceImpl
DemoService testInterface = RpcClient.getRefInstance(DemoService.class, client);
System.out.println("远程获取结果>>> "+testInterface.say("hello"));
System.out.println("远程获取结果>>> "+testInterface.num(3));
System.out.println("远程计算两数之和>>> "+testInterface.calc(3, 7));
System.out.println("远程计算两数之间所有数的和>>> "+testInterface.sum(1, 1000));

相關推薦

2025-04-16

集群,Keycloak 使用分布式缓存。从此版本开始,对于所有基于 TCP 的传输栈,节点之间的通信使用 TLS 进行加密,并使用自动生成的临时密钥和证书进行安全保护。 这加强了默认安全设置,并减少了新设置的配置步骤。 滚动更

2024-01-04

于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http” 主要特性 基于事件,每个消息都可事件路由 所谓语义,通过元信息进行语义描述 流关联性,来回相关的消息会串成一个流 语言无关,使用二进制输传数据(支持 tcp, ws, udp)。

2023-12-05

于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http” 主要特性 基于事件,每个消息都可事件路由 所谓语义,通过元信息进行语义描述 流关联性,有相关的消息会串成一个流 语言无关,使用二进制输传数据(支持 tcp, ws, udp)。支

2023-12-19

 是高效一个二进制的网络通讯协议(官方的讲法是:基于事件和语义消息流的网络应用协议),能够满足很多场景下使用。其次,Scoket.D 是温和的响应式(采用回调风格)。 1、三种通讯模式 send 只是发送(发送后不管

2023-06-09

节,如 Netty、mina、smart-socket 等通信框。ioGame 默认提供了基于 Netty 的实现。职责:与真实玩家连接的服务器 MicroBootstrap 与真实玩家连接的服务器,服务器的创建由 MicroBootstrap 完成,实际上 ExternalCore 是一个类似代理类的

2024-01-10

基于事件和语义消息流的网络应用层协议。 有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。支持 tcp, udp, ws, kcp 传输。 主要特性 基于事件,每个消息都可事件路由 所谓语义,通过元信息进行语义描述

2024-06-22

前的 A-1 和 A-2 下线,从而实现了无感知的更新。 开发者基于 ioGame 编写的项目模块,通常是条理清晰的,得益于框架对路由的合理设计,同时也为路由提供了优雅的访问权限控制。当我们整理好这些模块后,对于其他开发者接

2023-03-28

的 go-engine 实现,在 Serverless 领域引起广泛关注。独创的基于消息的 request-reply 同步通信模式被 Apache 明星项目 RocketMQ 和 Dubbo 集成,广泛服务于大量企业和业务场景。 Apache EventMesh 的设计非常灵活,可以进行定制以支持不同的

2023-12-07

无 有 有 有元信息 有 有 无 有 无 有事件(或路径) 有 有 无 无 有 有流(或消息关联性) 有 无 无 有 无 Broker 模式集群 有 无 无 有 无 异步 异步 同步 异步 异步

2024-08-09

前的 A-1 和 A-2 下线,从而实现了无感知的更新。 开发者基于 ioGame 编写的项目模块,通常是条理清晰的,得益于框架对路由的合理设计,同时也为路由提供了优雅的访问权限控制。当我们整理好这些模块后,对于其他开发者接

2023-09-27

年就已清晰可见。Jacobson 描述了一些早期的拥塞崩溃事件,导致吞吐量下降了三倍。 延伸阅读 谷歌称 TCP 拥塞控制算法 BBRv3 表现出色,本月提交到 Linux 内核主线

2024-07-25

的 A-1 和 A-2 下线,从而实现了无感知的更新。 开发者基于 ioGame 编写的项目模块,通常是条理清晰的,得益于框架对路由的合理设计,同时也为路由提供了优雅的访问权限控制。当我们整理好这些模块后,对于其他开发者接管

2023-07-19

的游戏,并且在 ioGame 中做这些工作是简单的。 开发者基于 ioGame 编写的项目模块,通常是条理清晰的,得益于框架对路由的合理设计,同时也为路由提供了优雅的访问权限控制。当我们整理好这些模块后,对于其他开发者接管

2024-01-23

Socket.D 是基于"事件"和"语义消息""流"的网络应用层协议。有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。支持 tcp, udp, ws, kcp 传输。协议特点可参考《官网介绍》。 pyton 已开发完成,再在测试中;go, rust, c++ 正