Documentation Index
Fetch the complete documentation index at: https://bun.zhcndoc.com/llms.txt
Use this file to discover all available pages before exploring further.
在构建 WebSocket 服务器时,通常需要存储与每个已连接客户端关联的一些识别信息或上下文。
使用 Bun.serve(),该“上下文数据”在连接初次升级时通过 server.upgrade() 调用中的 data 参数设置。
server.tsBun.serve({
fetch(req, server) {
const success = server.upgrade(req, {
data: {
socketId: Math.random(),
},
});
if (success) return undefined;
// 正常处理 HTTP 请求
// ...
},
websocket: {
// TypeScript: 像这样指定 ws.data 的类型
data: {} as { socketId: number },
// 定义 websocket 处理函数
async message(ws, message) {
// 上下文数据可通过 WebSocket 实例的 `data` 属性访问
console.log(`收到来自 ${ws.data.socketId} 的消息:${message}}`);
},
},
});
通常会从传入请求中读取 cookies/headers 以识别连接的客户端。
server.tstype WebSocketData = {
createdAt: number;
token: string;
userId: string;
};
Bun.serve({
async fetch(req, server) {
// 使用库解析 cookies
const cookies = parseCookies(req.headers.get("Cookie"));
const token = cookies["X-Token"];
const user = await getUserFromToken(token);
const upgraded = server.upgrade(req, {
data: {
createdAt: Date.now(),
token: cookies["X-Token"],
userId: user.id,
},
});
if (upgraded) return undefined;
},
websocket: {
// TypeScript: 像这样指定 ws.data 的类型
data: {} as WebSocketData,
async message(ws, message) {
// 将消息保存到数据库
await saveMessageToDatabase({
message: String(message),
userId: ws.data.userId,
});
},
},
});