前言
上篇文章讲解了项目搭建以及脚手架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",
接下来我们创建一个测试项目来对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服务的创建
运行效果如下
小结
以上是这个游戏服务框架的Core-Socket服务的简单搭建,下一篇文章将实现对rpc服务的简单创建。
后记
希望大佬们提出宝贵意见,谢谢👏