WebSocket
2025年9月27日大约 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');
};