# rpcserver **Repository Path**: renew95/rpcserver ## Basic Information - **Project Name**: rpcserver - **Description**: nodejs编写的RPC框架 使用socket完成不同进程之间的通讯, 统一编写规范实现高效开发。 - **Primary Language**: NodeJS - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-11 - **Last Updated**: 2025-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Node.js RPC Framework 一个基于 Node.js 的分布式 RPC 框架,支持多服务、多管理器的分层架构设计。 ## 核心特性 - **分层服务架构** - 支持服务(Service)、管理器(Manager)、方法(Method)三层结构 - 灵活的服务注册和发现机制 - 支持全局服务和非全局服务 - **RPC 通信** - 基于 Socket.IO 的进程间通信 - 支持方法调用和属性访问 - 支持同步和异步调用 - 自动的连接管理和重连机制 - **多种服务接入** - HTTP服务 (Express):支持RESTful API和跨域访问 - WebSocket服务 (Socket.IO):支持实时双向通信 - 数据库服务:MySQL, Redis, MongoDB - **配置管理** - 集中式的服务配置 - 支持开发和生产环境 - 灵活的调试端口配置 ## 框架结构 ``` project/ ├── config/ # 配置文件目录 │ ├── baseConfig.json # 基础配置 │ ├── server.json # 服务器配置 │ └── hallConfig.json # 大厅配置 ├── libs/ # 框架核心库 │ ├── base/ # 基础类 │ │ ├── BaseInit.js # 服务初始化基类 │ │ ├── BaseService.js# 服务基类 │ │ └── BaseEntity.js # 实体基类 │ └── rpc/ # RPC相关 │ ├── client.js # RPC客户端 │ ├── server.js # RPC服务器 │ ├── registry.js # 服务注册中心 │ └── proxy.js # RPC代理 ├── src/ # 业务代码目录 │ ├── main/ # 主服务 │ ├── logger/ # 日志服务 │ ├── redis/ # Redis服务 │ ├── mysql/ # MySQL服务 │ ├── mongodb/ # MongoDB服务 │ ├── http/ # HTTP服务 │ ├── gateway/ # 网关服务 │ │ ├── entity/ # 实体 │ │ ├── managers/ # 管理器 │ │ └── service.json # 服务定义 │ ├── hall/ # 大厅服务 │ └── globalhall/ # 全局大厅服务 └── package.json ``` ## 外部服务接入 框架提供两种方式接入外部服务: ### 1. HTTP服务 (端口: 7001) HTTP服务使用Express框架,提供RESTful API接口,支持跨域访问。 ```javascript // HTTP服务示例代码 const app = express(); app.use(cors({ origin: '*', // 允许所有来源访问 methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'] })); ``` #### API端点 - `/login` (POST): 用户登录 - `/setPlayerInfo` (POST): 设置玩家信息 - `/getFood` (POST): 获取食物信息 所有API都需要Token验证,通过Authorization头传递。 ### 2. WebSocket服务 (端口: 8001) WebSocket网关服务使用Socket.IO实现,支持实时双向通信。 ```javascript // WebSocket服务示例代码 const io = socketIO(httpServer, { cors: { origin: "*", methods: ["GET", "POST"] } }); ``` #### 网关事件 - `connection`: 新连接建立 - `login`: 玩家登录请求 - `heartbeat`: 心跳包 - `disconnect`: 断开连接 ## 配置说明 ### 服务配置 (server.json) ```json { "processes": [ { "name": "Gateway", // 服务名称 "type": "gateway", // 服务类型 "port": 3006, // 服务端口 "host": "localhost", // 服务地址 "number": 1, // 实例数量 "global": 0, // 是否全局服务 "breakPort": 9306 // 调试端口 } ] } ``` ### 基础配置 (baseConfig.json) ```json { "isDebug": true, // 是否为调试模式 "redis": { /* Redis配置 */ }, "mysql": { /* MySQL配置 */ }, "mongodb": { /* MongoDB配置 */ } } ``` ### 服务定义 (service.json) ```json { "Gateway": { "methods": [ { "name": "broadcastMessage", "parameters": ["string", "object"], "returns": "boolean" } ], "properties": [] }, "ConnectionManager": { "methods": [ { "name": "getOnlineCount", "parameters": [], "returns": "number" } ], "properties": [] } } ``` ## 服务调用方式 ### 1. 全局服务调用 ```javascript // 直接通过global对象访问 const loggerService = global.services.Logger; await loggerService.info('日志信息'); // 数据库服务示例 const mysqlService = global.services.MySQL; const result = await mysqlService.query('SELECT * FROM users'); ``` ### 2. 非全局服务调用 ```javascript // 通过RPC代理访问,支持三级结构 const result = await RPC.ServiceName.ManagerName.methodName(port, ...params); // 例如: const player = await RPC.Hall.PlayerManager.regeditPlayer(3100, playerData); const msg = await RPC.Gateway.broadcastMessage(3006, 'notice', { content: '系统公告' }); ``` ## 服务开发指南 ### 1. 创建新服务 1. 在 `config/server.json` 添加服务配置 2. 在 `src` 目录创建服务目录 3. 创建 `service.json` 定义服务接口 4. 实现服务类 ```javascript const BaseService = require('../../libs/base/BaseService'); class MyService extends BaseService { constructor(config) { super('MyService', config); } async init() { // 初始化逻辑 } } ``` ### 2. 创建管理器 ```javascript class PlayerManager { constructor() { this.players = new Map(); } async regeditPlayer(playerData) { // 实现玩家注册逻辑 } } ``` ### 3. 注册服务和管理器 ```javascript class MyService extends BaseService { async init() { // 创建管理器实例 this.playerManager = new PlayerManager(); // 注册管理器 this.addServiceInstance('PlayerManager', this.playerManager); } } ``` ## 安装与启动 ### 安装依赖 ```bash npm install ``` ### 启动服务 ```bash # 启动所有服务 npm start # 单独启动服务 npm run start:gateway # 启动网关服务 npm run start:http # 启动HTTP服务 npm run start:hall # 启动大厅服务 # 调试模式启动 npm run debug:gateway # 调试模式启动网关服务 ``` ## 安全性 - HTTP请求通过Token验证 - WebSocket连接需要登录验证 - 服务间RPC调用支持内部验证 - 完善的错误处理和日志记录 ## 许可证 MIT