开发一款属于自己的Node游戏服务框架之核心库实现(1)

124 阅读2分钟

前言

上篇文章讲解了项目搭建以及脚手架Cli的搭建和简单的测试,由于目前设计的框架分为socket服务和Rpc服务两部分,那么本篇文章将主要实现创建socket服务部分

项目环境

  • 系统:windows10
  • Node:v16.14.2
  • pnpm:8.2.0

项目开源地址github.com/whwanyt/pin…

Core搭建

在项目packages目录下我们新建一个目录core并执行npm init -y初始化项目 使用-y参数生成默认的package.json文件

安装socket.io

pnpm i socket.io

注意该命令需要在core项目根目录下执行

配置

//tsup.config.ts
import { defineConfig } from "tsup";

export default defineConfig({
  entry: ["./src/index.ts"],
  dts: true
});

//package.json
{
    ....
    "types": "./dist/index.d.ts",
    "exports": {
        "default":"./dist/index.js",
        "types": "./dist/index.d.ts"
    },
    ...
}

实现服务创建

创建src目录,并创建modal.ts文件来存储枚举和modal

export enum Transport {
  GRPC = "GRPC",
  SOCKET = "SOCKET",
}

创建index.ts文件和app.ts文件,并且在index.ts中将app.ts导出

export * from "./app";
//app.ts
import { createServer } from "http";
import { ApplicationContextOptions } from "./ApplicationContextOptions";
import { Transport } from "./modal";
import { Server, ServerOptions as SocketServerOptions } from "socket.io";

interface ServiceOptions<T> {
  transport: Transport;
  options: T;
}
class App {
}
export const AppFactory = new App();

实现创建服务方法,

async create<T = SocketServerOptions>(
    appModule: any,
    options: ServiceOptions<T>
  ) {
    const server = await this.initialize<T>(options);
    this.server = server;
    return this;
  }
  async initialize<T>(options: ServiceOptions<T>) {
    switch (options.transport) {
      case Transport.GRPC:
        break;
      default:
        const httpServer = createServer();
        return new Server(httpServer, options.options as SocketServerOptions);
    }
    const httpServer = createServer();
    return new Server(httpServer, options.options as SocketServerOptions);
  }

在上述代码中,根据传入参数,判断需要创建哪种服务,此处先实现了socket服务创建

打包项目

在package.json文件中添加build命令打包

"build": "tsup src/index.ts",

image.png 接下来我们创建一个测试项目来对Core进行测试

example搭建

项目创建

在项目packages目录下我们新建一个目录example并执行npm init -y初始化项目 在该项目下安装刚才编写的库,并安装ts-node来运行该服务

pnpm i @pinecone/core
pnpm i -D ts-node

创建app.ts文件

import { AppFactory, Transport } from "@pinecone/core";

class AppModule {}

async function main() {
  const app = await AppFactory.create(AppModule, {
    transport: Transport.GRPC,
    options: {},
  });
  app.listen(3000);
}
main();

@pinecone/core导入并简单实现一下,如上便完成了socket服务的创建 运行效果如下

image.png

小结

以上是这个游戏服务框架的Core-Socket服务的简单搭建,下一篇文章将实现对rpc服务的简单创建。

后记

希望大佬们提出宝贵意见,谢谢👏