Files
esengine/packages/network-server/README.md
2025-08-12 09:39:07 +08:00

3.2 KiB

@esengine/ecs-framework-network-server

ECS Framework 网络库 - 服务端实现

概述

这是 ECS Framework 网络库的服务端包,提供了:

  • 权威服务端实现
  • 客户端会话管理
  • 房间和匹配系统
  • 反作弊验证
  • 网络同步权威控制

特性

  • 权威服务端: 所有网络状态由服务端权威控制
  • 客户端验证: 验证客户端输入和操作的合法性
  • 房间系统: 支持多房间和实例管理
  • 反作弊: 内置反作弊验证机制
  • 高性能: 针对大量客户端连接进行优化

安装

npm install @esengine/ecs-framework-network-server

基本用法

import { NetworkServerManager } from '@esengine/ecs-framework-network-server';
import { NetworkComponent, SyncVar, ServerRpc } from '@esengine/ecs-framework-network-shared';

// 启动服务端
const server = new NetworkServerManager();
await server.startServer({
    port: 7777,
    maxConnections: 100
});

// 创建权威网络组件
@NetworkComponent()
class ServerPlayerController extends NetworkBehaviour {
    @SyncVar()
    public position: Vector3 = { x: 0, y: 0, z: 0 };
    
    @SyncVar()
    public health: number = 100;
    
    @ServerRpc({ requiresOwnership: true, rateLimit: 10 })
    public movePlayer(direction: Vector3): void {
        // 服务端权威的移动处理
        if (this.validateMovement(direction)) {
            this.position.add(direction);
        }
    }
    
    @ServerRpc({ requiresAuth: true })
    public takeDamage(damage: number, attackerId: number): void {
        // 服务端权威的伤害处理
        if (this.validateDamage(damage, attackerId)) {
            this.health -= damage;
            
            if (this.health <= 0) {
                this.handlePlayerDeath();
            }
        }
    }
}

房间系统

import { RoomManager, Room } from '@esengine/ecs-framework-network-server';

// 创建房间管理器
const roomManager = new RoomManager();

// 创建房间
const gameRoom = roomManager.createRoom({
    name: 'Game Room 1',
    maxPlayers: 4,
    isPrivate: false
});

// 玩家加入房间
gameRoom.addPlayer(clientId, playerData);

// 房间事件处理
gameRoom.onPlayerJoined((player) => {
    console.log(`Player ${player.name} joined room ${gameRoom.name}`);
});

gameRoom.onPlayerLeft((player) => {
    console.log(`Player ${player.name} left room ${gameRoom.name}`);
});

权限验证

import { AuthSystem } from '@esengine/ecs-framework-network-server';

// 配置认证系统
const authSystem = new AuthSystem({
    tokenSecret: 'your-secret-key',
    sessionTimeout: 30 * 60 * 1000, // 30分钟
    maxLoginAttempts: 5
});

// 客户端认证
authSystem.onClientAuth(async (clientId, credentials) => {
    const user = await validateCredentials(credentials);
    if (user) {
        return { userId: user.id, permissions: user.permissions };
    }
    return null;
});

// RPC 权限检查
@ServerRpc({ requiresAuth: true, requiresOwnership: true })
public adminCommand(command: string): void {
    // 只有已认证且拥有权限的客户端可以调用
    this.executeAdminCommand(command);
}

License

MIT