更新日志: 本文档最近更新于2025年8月27日,新增了性能优化建议和故障排除指南。
RemoteServer是DeepV Code项目中的核心远程访问组件,它通过WebSocket协议和Web界面,将命令行工具扩展为可远程访问的现代化应用。本文档详细分析了RemoteServer的架构设计、功能特性和使用方法。
⚡ 快速特性:
- 🌐 支持跨平台远程访问 (iOS/Android/Web)
- 🔒 多层安全认证机制
- 📱 响应式Web界面设计
- ⚡ 实时WebSocket通信
- 🔄 智能会话管理系统
┌─────────────────┐ WebSocket ┌─────────────────┐ 直接调用 ┌─────────────────┐
│ 移动端/Web │ ◄─────────────► │ RemoteServer │ ◄────────────► │ DeepV Code CLI │
│ 客户端 │ │ (桥梁服务器) │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ React Web │ │ Session管理 │
│ 界面 │ │ 认证与安全 │
└─────────────────┘ └─────────────────┘
- 位置:
packages/cli/src/remote/remoteServer.ts - 职责: 服务器生命周期管理、客户端连接管理、认证控制
- 关键方法:
start(): 启动服务器createSession(): 创建新会话getSession(): 获取指定会话
- 位置:
packages/cli/src/remote/staticServer.ts - 职责: 提供Web界面、密码验证页面、静态资源服务
- 特性: 智能查找Web资源目录、安全头设置、密码保护
- 职责: 单个客户端会话的生命周期管理
- 功能: 命令执行、状态同步、历史记录
- 职责: 单个WebSocket连接的消息处理和认证管理
- 协议: 支持多种消息类型的双向通信
// 1. 密码认证 (6位随机密码)
private generatePassword(): string {
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
let password = '';
for (let i = 0; i < 6; i++) {
password += chars[Math.floor(Math.random() * chars.length)];
}
return password;
}
// 2. JWT令牌验证 (飞书OAuth2)
private async initializeAuth(): Promise<boolean> {
const proxyAuthManager = ProxyAuthManager.getInstance();
const userInfo = proxyAuthManager.getUserInfo();
const jwtToken = await proxyAuthManager.getAccessToken();
return !!(userInfo && jwtToken);
}- 局域网限制: 默认只监听本地和局域网连接
- 密码保护: 每次启动生成新的6位随机密码
- 会话隔离: 每个客户端连接独立隔离
- 安全头设置: 防XSS、防劫持、防嗅探
interface SessionInfo {
id: string; // 会话唯一标识
createdAt: number; // 创建时间戳
lastActiveAt: number; // 最后活跃时间
session: RemoteSession; // 会话实例
firstUserInput?: string; // 第一条用户输入
lastUserInput?: string; // 最后一条用户输入
}- 最大会话数: 6个并发会话
- 清理策略: LRU (Least Recently Used)
- 状态同步: 实时同步处理状态和结果
- 历史记录: 保存完整的交互历史
| 消息类型 | 说明 | 发送方向 | 数据结构 |
|---|---|---|---|
AUTH_SUBMIT |
密码认证 | Client → Server | {password: string} |
AUTH_SUCCESS |
认证成功 | Server → Client | {} |
AUTH_FAILED |
认证失败 | Server → Client | {message: string} |
SELECT_SESSION |
选择会话 | Client → Server | {sessionId?: string} |
CREATE_SESSION |
创建新会话 | Client → Server | {} |
COMMAND |
执行命令 | Client → Server | {command: string} |
OUTPUT |
输出结果 | Server → Client | {content: string, type: string} |
STATUS |
状态更新 | Server → Client | {status: string, message: string} |
INTERRUPT |
中断操作 | Client → Server | {} |
PING/PONG |
心跳检测 | 双向 | {} |
export class MessageValidator {
static isValidMessage(message: any): message is RemoteMessage {
return message &&
typeof message.type === 'string' &&
typeof message.id === 'string' &&
message.payload !== undefined;
}
}- 启动命令:
npm run start -- --local-mode - 端口: 默认4058,自动查找可用端口
- 功能:
- 完整的Web界面 (React应用)
- WebSocket API服务
- 静态文件服务
- 密码保护页面
- 二维码分享
- 启动命令:
npm run start -- --remote-mode - 功能:
- 纯WebSocket API接口
- 基础HTML页面
- 适合自定义客户端开发
async function findAvailablePort(startPort: number = 4058): Promise<number> {
for (let port = startPort; port < startPort + 100; port++) {
if (await isPortAvailable(port)) {
return port;
}
}
throw new Error(`无法在 ${startPort}-${startPort + 99} 范围内找到可用端口`);
}- 监听地址:
0.0.0.0(允许局域网访问) - 端口范围: 4058-4157 (自动查找)
- 协议支持: HTTP/HTTPS、WS/WSS
RemoteServer会主动检测系统电源管理设置,确保长时间连接稳定:
private checkPowerManagement(): boolean {
if (platform === 'darwin') {
const result = execSync('pmset -g assertions', { encoding: 'utf8' });
const preventSleepActive = result.includes('PreventUserIdleSystemSleep') ||
result.includes('PreventSystemSleep');
if (!preventSleepActive) {
console.log('❌ 检测到系统可能会休眠,为保证远程连接稳定,程序将退出');
return false;
}
}
return true;
}- macOS: 检查
pmset设置,强制要求禁用睡眠 - Windows: 提示调整电源设置,不强制退出
- Linux: 提示禁用挂起功能,不强制退出
StaticServer智能查找Web资源目录:
remote-client/build(开发环境)bundle/web(生产环境)../assets/web(fallback)
- 设计: 现代化深色主题,响应式设计
- 安全: 实时验证、防暴力破解
- 框架: React 18 + TypeScript
- 状态管理: React Hooks + Context API
- UI组件: 自研响应式组件库
- 通信: WebSocket + 自定义协议
- 构建工具: Vite + ESBuild
# 1. 启动集成模式 (推荐)
npm run start -- --local-mode
# 2. 启动纯WebSocket模式
npm run start -- --remote-mode
# 3. 单独构建Web客户端
cd remote-client
npm run build# 1. 构建完整项目
npm run build
# 2. 启动生产服务器
./dist/deepv --local-mode
# 3. 使用Docker (如果有)
docker run -p 4058:4058 deepv-code:latest --local-mode// 连接WebSocket
const ws = new WebSocket('ws://localhost:4058/ws');
// 认证
ws.send(JSON.stringify({
type: 'AUTH_SUBMIT',
id: generateId(),
payload: { password: 'ABC123' }
}));- 扫描二维码: Web界面提供二维码快速连接
- 手动输入:
http://[IP]:4058?password=[密码] - 局域网访问: 自动检测并显示局域网IP地址
// remoteLogger 提供结构化日志
remoteLogger.info('RemoteServer', '创建新session', {
sessionId,
totalSessions: this.sessions.size
});
remoteLogger.error('RemoteServer', '客户端错误', {
clientIP,
error
});- 连接状态: 实时监控客户端连接数
- 会话管理: 追踪会话创建、销毁和活跃度
- 消息统计: 记录消息类型和处理时间
- 连接断开: 自动清理会话和资源
- 认证失败: 限制重试次数,记录异常IP
- 消息异常: 验证消息格式,防止恶意输入
interface RemoteClient {
connect(url: string): Promise<void>;
authenticate(password: string): Promise<boolean>;
selectSession(sessionId?: string): Promise<void>;
sendCommand(command: string): Promise<void>;
onMessage(handler: (message: RemoteMessage) => void): void;
}- 消息中间件: 自定义消息处理逻辑
- 认证插件: 集成第三方认证系统
- 协议扩展: 添加新的消息类型和功能
// REST API (集成模式)
POST /api/verify-password
GET /api/sessions
POST /api/sessions
DELETE /api/sessions/:id
// WebSocket API
ws://host:port/ws- 会话限制: 最多3个并发会话
- 历史清理: 定期清理过期历史记录
- 资源回收: 连接断开时立即释放资源
- 消息压缩: 大消息自动压缩传输
- 心跳机制: 定期发送PING/PONG保持连接
- 断线重连: 客户端自动重连机制
- 防护措施: 限制连接频率、消息大小
- 资源限制: 限制并发连接数和会话数
- 监控告警: 异常行为检测和日志记录
# 检查端口占用
lsof -i :4058
netstat -an | grep 4058
# 解决方案
# - 修改启动端口
# - 关闭占用进程
# - 使用自动端口查找# 检查认证状态
npm run start -- --check-auth
# 重新认证
npm run start -- --auth- 网络问题: 检查防火墙设置
- 证书问题: HTTPS环境下的WSS配置
- 代理问题: 企业网络代理设置
# 启用详细日志
DEBUG=deepv:remote npm run start -- --local-mode
# 查看WebSocket消息
npm run start -- --local-mode --debug-ws- WebRTC点对点连接支持
- 文件传输功能优化
- 移动端手势操作
- AI助手语音交互
- 多人协作空间
- 云端会话同步
RemoteServer是DeepV Code项目的重要创新,它将传统的命令行工具转变为现代化的远程访问应用。通过WebSocket协议和Web界面,用户可以在任何设备上享受完整的AI编程体验。
- 无缝体验: 移动端和Web端与CLI完全一致的功能
- 安全可靠: 多层认证和会话隔离保证安全性
- 易于部署: 简单的启动命令即可运行
- 高度可扩展: 灵活的架构支持自定义开发
RemoteServer不仅是技术突破,更是用户体验的重大提升,为AI编程工具的普及和应用开辟了新的道路。
文档版本: v1.2
最后更新: 2025年8月27日
维护者: @yykingking
技术支持: DeepV Code Team
工具演示: ✅ 已完成所有CLI工具功能验证