Skip to main content

游戏逻辑服介绍

ioGame


从架构简图中,我们知道了整体架构由三部分组成,分别是 1.游戏对外服、2.游戏网关、3.游戏逻辑服,三者既可相互独立,又可相互融合。

游戏逻辑服在架构图位置的右边部分,GameLogicServer。

介绍

游戏逻辑服的职责是处理具体的业务逻辑,也就是我们编写的 action。

如何安装

如果你是初次体验或想快速了解框架的,在 pom.xml 添加如下内容, run-one-netty 已经包含了游戏对外服、Broker(游戏网关)、游戏逻辑服。

pom.xml
<dependency>
<groupId>com.iohao.game</groupId>
<artifactId>run-one-netty</artifactId>
<version>${ioGame.version}</version>
</dependency>

通常在实际开发中,比较推荐的做法中单独为游戏逻辑服创建一个模块,并在 pom.xml 中添加如下内容

see https://central.sonatype.com/artifact/com.iohao.game/bolt-client

pom.xml
<dependency>
<groupId>com.iohao.game</groupId>
<artifactId>bolt-client</artifactId>
<version>${ioGame.version}</version>
</dependency>

创建游戏对外服

游戏逻辑服需要继承 AbstractBrokerClientStartup , 有三个方法需要实现

  1. createBarSkeleton,当前游戏逻辑服使用的业务框架
  2. createBrokerClientBuilder,当前游戏逻辑服信息。
  3. createBrokerAddress游戏网关的连接地址。

代码说明

  • code 4,业务框架构建器参数
  • code 5,扫描 action 类所在包。 内部会扫描当前类路径和子包路径下的所有类,无论有多少个 action 类,只需要配置任意一个类就行。
  • code 7,创建业务框架构建器
  • code 8,添加控制台输出插件
  • code 10,创建业务框架
  • code 14~18,创建游戏逻辑服构建器,并设置逻辑服名称。
  • code 21~25,设置连接到 Broker 的地址。
public class DemoLogicServer extends AbstractBrokerClientStartup {
@Override
public BarSkeleton createBarSkeleton() {
var config = new BarSkeletonBuilderParamConfig()
.scanActionPackage(DemoAction.class);

var builder = config.createBuilder();
builder.addInOut(new DebugInOut());

return builder.build();
}

@Override
public BrokerClientBuilder createBrokerClientBuilder() {
BrokerClientBuilder builder = BrokerClient.newBuilder();
builder.appName("DemoLogicServer");
return builder;
}

@Override
public BrokerAddress createBrokerAddress() {
String localIp = "127.0.0.1";
int brokerPort = IoGameGlobalConfig.brokerPort;
return new BrokerAddress(localIp, brokerPort);
}
}

startupSuccess

游戏逻辑服启动成功后,会执行 startupSuccess 方法。 开发者可以在这里做一些业务逻辑,如

public class DemoLogicServer extends AbstractBrokerClientStartup {
...
@Override
public void startupSuccess(BrokerClient brokerClient) {
// BarSkeleton barSkeleton = brokerClient.getBarSkeleton();
// ExecutorRegion executorRegion = barSkeleton.getExecutorRegion();
// EventBus eventBus = barSkeleton.option(SkeletonAttr.eventBus);
// barSkeleton.option(SkeletonAttr.brokerClientContext);
}
}

启动

public static void main(String[] args) {
BrokerClientApplication.start(new DemoLogicServer());
}