npm.io
1.38.3 • Published 15h agoCLI

@mtop-devtools/cloud-server

Licence
ISC
Version
1.38.3
Deps
4
Size
44 kB
Vulns
0
Weekly
0

@mtop-devtools/cloud-server

云端 WebSocket Server,用于中转云端 Agent 请求到本地连接器。

安装

npm install -g @mtop-devtools/cloud-server
# 或
pnpm add -g @mtop-devtools/cloud-server

使用

命令行方式

Server 默认以后台守护进程方式运行,启动后立即返回,并打印本地机器需要执行的连接命令。

mtop-devtools-cloud-server [command] [options]

子命令:

  • start - 后台启动 server(默认,不写也等价于 start
  • stop - 停止后台 server
  • restart - 重启后台 server
  • status - 查看运行状态及连接信息
  • logs - 打印 server 日志末尾

选项:

  • --foreground / -f - 前台运行(不守护化,适合 systemd / Docker / PM2)
  • --port <port> - 服务器端口(默认 8080)
  • --path <path> - WebSocket 路径(默认 /ws)
  • --token <token> - 鉴权密钥(未指定时自动生成)
  • --heartbeat <seconds> - 心跳超时时间(默认 90 秒)
  • --max-connections <n> - 最大连接数(默认 100)

示例:

# 后台启动(自动生成 token),打印连接命令后立即返回
mtop-devtools-cloud-server

# 查看状态与连接信息
mtop-devtools-cloud-server status

# 停止 / 重启
mtop-devtools-cloud-server stop
mtop-devtools-cloud-server restart

# 自定义端口和鉴权
mtop-devtools-cloud-server start --port 9000 --token your-secret-token

# 前台运行(交给外部进程管理器托管)
mtop-devtools-cloud-server --foreground

后台启动后会打印供本地机器使用的连接命令,例如:

[CloudServer] Started in background (pid 12345)
[CloudServer] Logs: ~/.mtop-devtools/cloud-server.log

  Connect from your local machine:
    npx @mtop-devtools/cloud-connector "ws://10.0.1.100:8080/ws?token=xxx"

运行时文件位于 ~/.mtop-devtools/

  • cloud-server.json - 连接配置(含 server URL、pid、端口等),cloud-client 自动读取
  • cloud-server.log - 后台进程日志(logs 子命令读取,或 tail -f 跟踪);超过 5MB 会在下次启动时滚动为 cloud-server.log.1

守护进程的启停、状态、日志滚动等生命周期逻辑由共享包 @mtop-devtools/daemon-core 提供(与 cloud-connector 复用同一套实现)。

关于 token:

  • 未指定 --token 时会自动生成。restart沿用当前 token,因此之前打印的连接命令重启后仍然有效。
  • stop 后再 start 属于全新启动,会重新生成 token;若希望连接命令长期固定,请显式传入 --token 或设置 MTOP_DEVTOOLS_TOKEN

环境变量:

  • MTOP_DEVTOOLS_TOKEN - 鉴权密钥(覆盖 --token 选项)
  • CLOUD_SERVER_HOST - 公网主机名(默认自动获取)
编程方式
import { CloudServer } from '@mtop-devtools/cloud-server';

const server = new CloudServer({
  port: 8080,
  path: '/ws',
  token: 'your-secret-token',
  heartbeatTimeout: 90,
  maxConnections: 100,
  maxMessageSize: 10 * 1024 * 1024,
});

await server.start();

// 获取统计信息
const stats = server.getStats();
console.log(stats);
// { connections: 2, agents: 1, connectors: 1, pendingRequests: 0 }

// 优雅关闭
await server.stop();

架构

云端 Agent
  ↓
@mtop-devtools/cloud-client
  ↓ (WebSocket)
@mtop-devtools/cloud-server (本进程)
  ↓ (WebSocket)
@mtop-devtools/cloud-connector (本地)
  ↓ (Unix Socket)
@mtop-devtools/native-host
  ↓
Chrome Extension / CDP

连接类型

Server 接受两种类型的连接:

  1. Agent 连接 - 发起请求的云端客户端
  2. Connector 连接 - 转发请求到 native-host 的本地连接器

Server 会自动识别连接类型,并将 Agent 的请求转发到可用的 Connector。

消息协议

请求格式(Agent → Server)
{
  "id": "unique-id",
  "action": "get_requests",
  "data": { "count": 5 },
  "version": "1.30.0"
}
响应格式(Server → Agent)
{
  "id": "unique-id",
  "success": true,
  "data": { ... },
  "versionWarning": "..."
}
心跳格式
{ "type": "ping", "timestamp": 1234567890 }
{ "type": "pong", "timestamp": 1234567890 }

鉴权

设置 token 后,所有连接必须携带正确的 token:

# Agent 连接
ws://server.com/ws?token=your-secret-token

# Connector 连接
ws://server.com/ws?token=your-secret-token

部署建议

交给外部进程管理器(systemd / Docker / PM2)托管时,请加 --foreground,让 server 在前台运行,由管理器负责守护与重启。

使用 systemd(Linux)
[Unit]
Description=Mtop DevTools Cloud Server
After=network.target

[Service]
Type=simple
User=your-user
ExecStart=/usr/bin/mtop-devtools-cloud-server --foreground --port 8080 --token your-token
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
使用 Docker
FROM node:20-alpine
RUN npm install -g @mtop-devtools/cloud-server
EXPOSE 8080
CMD ["mtop-devtools-cloud-server", "--foreground", "--token", "your-token"]
使用 PM2
pm2 start mtop-devtools-cloud-server --name mtop-cloud-server -- --foreground --port 8080 --token your-token

注意事项

  • 建议在生产环境使用 WSS(WebSocket Secure)加密传输
  • 使用反向代理(如 Nginx)处理 WSS 升级
  • 设置合理的 maxConnections 限制资源占用
  • 启用 token 鉴权保护服务安全
  • 在沙箱环境中启动时,会自动检测并使用平台分配的公网地址
  • 如果沙箱端口映射 API 不可用,会回退到使用本地 IP 地址

Keywords