[ PROMPT_NODE_24284 ]
Sandbox 设计模式
[ SKILL_DOCUMENTATION ]
# 常见模式
## 具备代码上下文的 AI 代码执行
typescript
export default {
async fetch(request: Request, env: Env): Promise {
const { code, variables } = await request.json();
const sandbox = getSandbox(env.Sandbox, 'ai-agent');
// 创建包含持久化变量的上下文
const ctx = await sandbox.createCodeContext({
language: 'python',
variables: variables || {}
});
// 执行并获取丰富输出(文本、图像、HTML)
const result = await ctx.runCode(code);
return Response.json({
outputs: result.outputs, // [{ type: 'text'|'image'|'html', content }]
error: result.error,
success: !result.error
});
}
};
## 交互式开发环境
typescript
export default {
async fetch(request: Request, env: Env): Promise {
const proxyResponse = await proxyToSandbox(request, env);
if (proxyResponse) return proxyResponse;
const sandbox = getSandbox(env.Sandbox, 'ide', { normalizeId: true });
if (request.url.endsWith('/start')) {
await sandbox.exec('curl -fsSL https://code-server.dev/install.sh | sh');
await sandbox.startProcess('code-server --bind-addr 0.0.0.0:8080', {
processId: 'vscode'
});
const exposed = await sandbox.exposePort(8080);
return Response.json({ url: exposed.url });
}
return new Response('Try /start');
}
};
## WebSocket 实时服务
typescript
export default {
async fetch(request: Request, env: Env): Promise {
const proxyResponse = await proxyToSandbox(request, env);
if (proxyResponse) return proxyResponse;
if (request.headers.get('Upgrade')?.toLowerCase() === 'websocket') {
const sandbox = getSandbox(env.Sandbox, 'realtime-service');
return await sandbox.wsConnect(request, 8080);
}
// 非 WebSocket:暴露预览 URL
const sandbox = getSandbox(env.Sandbox, 'realtime-service');
const { url } = await sandbox.exposePort(8080, {
hostname: new URL(request.url).hostname
});
return Response.json({ wsUrl: url.replace('https', 'wss') });
}
};
**Dockerfile**:
dockerfile
FROM docker.io/cloudflare/sandbox:latest
RUN npm install -g ws
EXPOSE 8080
## 进程就绪模式
typescript
export default {
async fetch(request: Request, env: Env): Promise {
const sandbox = getSandbox(env.Sandbox, 'app-server');
// 启动服务器
cons