Files

54 lines
1.6 KiB
TypeScript

/**
* 客户端检测工具函数
* 用于在服务器端从请求头中获取客户端信息
*/
/**
* 从请求头中检测客户端ID
* @param request - Remix Request对象
* @returns 客户端ID字符串
*/
export const detectClientFromRequest = (request: Request): string => {
// 从Nginx传递的头部获取客户端ID
const clientId = request.headers.get('X-Client-ID');
const originalPort = request.headers.get('X-Original-Port');
if (clientId) {
console.log(`🎯 检测到客户端ID: ${clientId} (端口: ${originalPort})`);
return clientId;
}
// 根据端口映射客户端ID(备用方案)
const portToClient: Record<string, string> = {
'5174': 'client-a',
'5175': 'client-b',
'5176': 'client-c',
'5177': 'client-d'
};
if (originalPort && portToClient[originalPort]) {
console.log(`🎯 通过端口映射检测到客户端: ${portToClient[originalPort]} (端口: ${originalPort})`);
return portToClient[originalPort];
}
console.log('⚠️ 未能检测到客户端ID,使用默认值: main');
return 'main';
};
/**
* 获取请求的调试信息
* @param request - Remix Request对象
* @returns 调试信息对象
*/
export const getRequestDebugInfo = (request: Request) => {
return {
url: request.url,
method: request.method,
clientId: request.headers.get('X-Client-ID'),
originalPort: request.headers.get('X-Original-Port'),
forwardedPort: request.headers.get('X-Forwarded-Port'),
realIp: request.headers.get('X-Real-IP'),
forwardedFor: request.headers.get('X-Forwarded-For'),
userAgent: request.headers.get('User-Agent')
};
};