3.2 KiB
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