WebSocket
2025/11/7大约 1 分钟hyperlanewebrustusage-introductionwebsocket
提示
hyperlane 框架支持 websocket 协议,服务端自动处理协议升级,支持请求中间件,路由处理,响应中间件。
服务端代码
提示
hyperlane 框架发送 websocket 响应使用send_body,与 sse 相同。 由于 websocket协议基于http,所以可以像使用 http 一样处理请求, 但是需要注意响应数据需要通过,WebSocketFrame::create_frame_list 进行帧处理。 如果开发者尝试调用 send 会导致客户端处理错误, (服务端发送响应前需要处理成符合websocket 规范的响应,客户端才能正确解析)。所以对于 websocket 响应, 请统一使用 send_body 或者 send_body_list_with_data 方法。
单点发送
提示
完整代码参考 发送响应 里 WebSocket 发送 部分 。
广播发送
提示
需要阻塞住当前处理函数,将后续所有请求在处理函数中处理。 这里使用 tokio 的 select 来处理多个请求,使用 hyperlane-broadcast 来实现广播。
客户端代码
const ws = new WebSocket('ws://localhost:60000/websocket');
ws.onopen = () => {
console.log('WebSocket opened');
setInterval(() => {
ws.send(`Now time: ${new Date().toISOString()}`);
}, 1000);
};
ws.onmessage = (event) => {
console.log('Receive: ', event.data);
};
ws.onerror = (error) => {
console.error('WebSocket error: ', error);
};
ws.onclose = () => {
console.log('WebSocket closed');
};