Skip to main content

ionet documentation

ionet are cool

 
ionet 是一个开源的轻量级分布式网络编程框架,框架能够做到纳秒级别的端到端延迟。 框架内部消息传输层采用了 Aeron + SBE 组合,真.零拷贝、零回环、零反射、零GC、零运行时解析、编解码开销几乎为零。 通过无锁、基于共享内存的环形缓冲区实现,彻底避免了内核态切换锁竞争,这是达到极低延迟的关键。 极致的 CPU 效率,它让消息处理的速度几乎可以达到底层硬件的极限

适用场景
  • 网络游戏服务器
  • 物联网
  • 高频行情推送
  • 实时博弈:在线游戏引擎
  • 电信:需要高性能数据处理的系统。
  • 任何对延迟有极端要求的内部服务通信
  • 实时流数据处理(如视频流、传感器数据)
  • 高频金融交易、市场数据分发、订单处理。(低延迟要求极高)

框架具备一次编写到处对接的能力,为客户端提供了代码生成的辅助功能,能够帮助客户端开发者减少巨大的工作量。

你只需要编写一次 java 代码,就能为 Godot、UE、Unity、CocosCreator、Laya、React、Vue、Angular ...等项目生成统一的交互接口。 交互接口确保了方法的参数类型安全且明确,使我们在编译阶段就能发现潜在问题。 这种做法有效避免了安全隐患,并减少了联调时可能出现的低级错误。

支持语言: C#、TypeScript、GDScript、C++、Lua
 

客户端请求服务器

Java Action

public async Task TestLoginVerify()
{
var loginVerifyMessage = new LoginVerifyMessage { Jwt = "10" };

// code style: callback. Advantages: simple, integrated.
// cn: 编码风格:回调。 优点:简洁,一体化。
MyAction.OfLoginVerify(loginVerifyMessage, result =>
{
var userMessage = result.GetValue<UserMessage>();
result.Log(userMessage);
});

// code style: async await. Advantages: Avoid callback hell.
// cn: 编码风格:async await 机制。 优点:可避免回调地狱。
var result = await MyAction.OfAwaitLoginVerify(loginVerifyMessage);
var userMessage = result.GetValue<UserMessage>();
result.Log(userMessage);
}

public async Task TestIntValue()
{
const int value = 1;

MyAction.OfIntValue(value, result =>
{
result.Log(result.GetInt());
});

var result = await MyAction.OfAwaitIntValue(value);
result.Log(result.GetInt());
}

public async Task TestListString()
{
const string value = "hello";

MyAction.OfListString(value, result =>
{
result.Log(result.ListString());
});

var result = await MyAction.OfAwaitListString(value);
result.Log(result.ListString());
}
@ActionController(1)
public final class MyAction {
@ActionMethod(1)
private UserMessage loginVerify(LoginVerifyMessage verifyMessage) {
var userMessage = new UserMessage();
...
return userMessage;
}

@ActionMethod(2)
private int intValue(int value) {
return value + 1;
}

@ActionMethod(3)
private List<String> listString(String value) {
return List.of(value, "ionet");
}
}

.proto
syntax = "proto3";
package common;

// LoginVerify
message LoginVerifyMessage {
// jwt
string jwt = 1;
}

// User
message UserMessage {
// userId
int64 user_id = 1;
// nickname
string name = 2;
}
Focus on What Matters

纳秒级端到端延迟

框架能够做到亚微秒甚至纳秒级别的端到端延迟, 拥有极高的吞吐量。

大量采用了无锁算法,极大地减少了线程竞争和上下文切换的开销,从而实现了极低的延迟。

真.零拷贝、零回环、零反射、零GC、零运行时解析、编解码开销几乎为零。

Easy to Use

客户端 SDK & 对接代码生成

框架具备一次编写到处对接的能力,为客户端提供了代码生成的辅助功能,能够帮助客户端开发者减少巨大的工作量。

你只需要编写一次 java 代码,就能为 Godot、UE、Unity、CocosCreator、Laya、React、Vue、Angular ...等项目生成统一的交互接口。

支持语言: C#、TypeScript、GDScript、C++、Lua

Powered by React

支持多种数据协议 & 连接方式

让开发者用一套业务代码,就能支持 Protobuf、JSON ...等数据协议,并支持扩展。

让开发者用一套业务代码,能同时支持多种连接方式,如 TCP、WebSocket、UDP ...等连接方式,并支持扩展。

Easy to Use

自带负载均衡、分布式支持

内置的负载均衡策略,确保请求在多节点间高效均匀分配。

架构是可以动态扩缩的,对外服和逻辑服支持动态增加和减少。 无论未来用户数量增加或减少,我们都能够轻松应对。

Powered by React

线程安全

框架为开发者解决了单个用户的并发问题,即使用户断线重连,也会使用相同的线程来消费业务。

框架在线程的扩展性上提供了友好的支持,开发者可以很容易的编写出无锁并发代码。

Focus on What Matters

架构灵活性

架构由对外服和逻辑服组成,两者既可相互独立,又可相互融合。

这意味着我们可以适应任何类型的游戏,因为只需通过调整部署方式,就可以满足不同类型的游戏需求。

Powered by React

功能模块化,逻辑服组件化

逻辑服是支持独立运行的,只需接入就可以为用户和其他逻辑服提供功能上的扩展与增强。

我们可以将一些逻辑服组件化,并制作成相对通用的组件,从而实现功能模块化的可能性。

Focus on What Matters

支持多种通信模型

与客户端通信时,支持多种通信模型。

broadcast : 服务器主动广播。

request/void: 单次请求处理时的,请求/无响应。

request/response: 单次请求处理时的,请求/响应。

Easy to Use

类 MVC 的编码风格 & 避免类爆炸设计

为开发者提供了类 MVC 的编码风格(无入侵的 Java Bean ),这种设计方式很好的避免了类爆炸。

Focus on What Matters

极好的编码体验 & 免写对接文档

代码即联调文档、JSR380验证、断言 + 异常机制 = 更少的维护成本

action 支持自动装箱、拆箱基础类型,用于解决协议碎片的问题 ...等诸多丰富的功能,使得开发者的业务代码更加的清晰、简洁。

Easy to Use

模拟客户端请求

与单元测试不同的是,模拟客户端请求是模拟真实的网络环境,并且在模拟测试的过程中与服务器交互是可持续的、可互动的。

与前端同学联调某个功能时,不需要跟前端哥们说:“在点一下、在点一下、在点一下了”。这种“在点一下”的交流联调方式将成为过去式。

Powered by React

插件机制

业务框架提供了插件机制,插件是可插拨、可扩展的,框架内置提供了一些插件用于业务开发

合理利用好各个插件,可以让我们在开发阶段就能知道问题所在,提前发现问题,提前预防问题。