跳转到内容

WebSocket

createWebSocketRouter 提供了轻量级 WebSocket 路由器,支持路径匹配、通配符和升级校验。

import { createWebSocketRouter } from "@ventostack/core";
const wsRouter = createWebSocketRouter();
wsRouter.ws("/chat", {
open(ws) {
console.log("客户端已连接");
},
message(ws, msg) {
ws.send(`收到: ${msg}`);
},
close(ws, code, reason) {
console.log("连接关闭", code);
},
});

路径支持 /* 通配符:

wsRouter.ws("/room/*", {
message(ws, msg) {
// 匹配 /room/123、/room/abc 等
console.log("房间消息:", msg);
},
});

通过 upgrade 回调在握手阶段拒绝非法连接:

wsRouter.ws("/private", {
upgrade(req) {
const token = new URL(req.url).searchParams.get("token");
return token === "secret";
},
message(ws, msg) {
ws.send("pong");
},
});

通过 data 回调将自定义数据注入 ws.data

wsRouter.ws("/user", {
data(req) {
const url = new URL(req.url);
return { userId: url.searchParams.get("uid") };
},
open(ws) {
console.log("用户 ID:", ws.data.userId);
},
message(ws, msg) {
ws.send(`Hello ${ws.data.userId}`);
},
});

调用 compile() 生成可直接传入 Bun.serve() 的配置:

const compiled = wsRouter.compile();
Bun.serve({
port: 3000,
fetch(req, server) {
if (compiled.upgrade(req, server)) return;
return new Response("Not found", { status: 404 });
},
websocket: compiled.handlers,
});
属性类型说明
pathstring路由路径
open(ws) => void连接建立回调
message(ws, msg) => void消息接收回调(必填)
close(ws, code, reason) => void连接关闭回调
drain(ws) => void缓冲区排空回调
upgrade(req) => boolean | Promise<boolean>升级前校验,返回 false 拒绝连接
data(req) => Record<string, unknown>附加到 ws.data 的数据工厂
方法/属性说明
send(data)发送字符串或 Buffer
close(code?, reason?)关闭连接
data只读附加数据
readyState连接状态