Skip to main content

RunOne

tip

在部署方面,ionet 支持多服单进程的方式部署,也支持多服多进程多机器的方式部署,在部署方式上可以随意的切换而不需要更改代码。 日常中我们可以按照单体思维开发,到了生产可以选择性的使用多进程的方式部署。

介绍

RunOne 是一个启动器,可用于启动对外服、逻辑服、CenterServer。

本篇介绍如何在一个进程中同时启动对外服和逻辑服。

  • code 6,创建,并设置对外服。
  • code 7,创建,并设置逻辑服。
  • code 8,启动。
final class OneApplication {
static void main() {
...
new RunOne()
.setAeron(aeron)
.enableCenterServer()
.setExternalServer(ofExternalServer())
.setLogicServerList(listLogic())
.startup();
}

static ExternalServer ofExternalServer() {
var builder = ExternalMapper.builder(ExternalGlobalConfig.externalPort);
builder.setJoinEnum(ExternalJoinEnum.WEBSOCKET);
return builder.build();
}

static List<LogicServer> listLogic() {
return List.of(
new HallLogicServer()
, new RoomLogicServer()
);
}
}

CenterServer

CenterServer 是一个类似注册中心的服务,在整个架构中只能启动一个。 如果你启动了多个进程,也只能有一个注册中心。

  • code 5: 启动注册中心。
final class OneApplication {
static void main() {
new RunOne()
...
.enableCenterServer()
.startup();
}
}

Aeron

Aeron 是网络通信框架,用于内部网络通信的支持。

关于 Aeron 的优点可阅读

final class OneApplication {
static void main() {
var aeron = new AeronLifecycleManager().getAeron();

new RunOne()
...
.setAeron(aeron)
.startup();
}
}

关于 Aeron、MediaDriver 相关内容,请阅读相关库的文档。

public class AeronLifecycleManager {
...
private MediaDriver mediaDriver;
private Aeron aeron;

public Aeron getAeron() {
return aeron;
}
}

Example Source Code

see https://github.com/iohao/ionet-examples

path : ionet-cookbook-code

  • OneApplication