当前位置: 首页 > wzjs >正文

兴义网站建设网站建设网络黄页推广软件哪个好用

兴义网站建设网站建设,网络黄页推广软件哪个好用,做奶茶店网站,网店货源一件代发货使用 Hyperlane 实现 WebSocket广播 hyperlane 框架原生支持 WebSocket 协议,开发者无需关心协议升级过程,即可通过统一接口处理 WebSocket 请求。本文将介绍如何使用 hyperlane 实现服务端的单点发送与广播发送功能,以及如何配套实现一个简…

使用 Hyperlane 实现 WebSocket广播

hyperlane 框架原生支持 WebSocket 协议,开发者无需关心协议升级过程,即可通过统一接口处理 WebSocket 请求。本文将介绍如何使用 hyperlane 实现服务端的单点发送与广播发送功能,以及如何配套实现一个简单的 WebSocket 客户端。

框架特性提示

hyperlane 框架支持 WebSocket 协议,服务端自动处理协议升级,支持请求中间件、路由处理、响应中间件等特性。

需要注意的是,WebSocket 响应应使用 send_response_body 方法进行发送;使用 send_response 将导致客户端解析失败,因为该方法不会将响应封装成符合 WebSocket 协议格式。


服务端:单点发送示例

该示例中,服务端仅将客户端发送的数据原样返回,实现 WebSocket 回显(echo)功能。

pub async fn handle(ctx: Context) {let request_body: Vec<u8> = ctx.get_request_body().await;let _ = ctx.send_response_body(request_body).await;
}

服务端:广播发送示例

在广播模式下,多个客户端连接共享同一个消息通道,任一客户端发送的消息会被广播至所有连接的客户端。

注意事项

  • 广播功能使用 tokio::broadcast 实现。
  • 使用 tokio::select 同时监听客户端发来的新消息与广播通道中的新数据。
  • 如果未开启 enable_inner_websocket_handle,客户端需连接后主动发送任意消息(哪怕是空消息)才能接收广播。
  • 开启该配置后,连接即代表已准备好接收广播。

示例代码

static BROADCAST_CHANNEL: OnceLock<Broadcast<ResponseBody>> = OnceLock::new();fn ensure_broadcast_channel() -> Broadcast<ResponseBody> {BROADCAST_CHANNEL.get_or_init(|| Broadcast::default()).clone()
}pub async fn handle(ctx: Context) {if ctx.get_stream().await.is_none() {ctx.aborted().await;return;}let broadcast: Broadcast<ResponseBody> = ensure_broadcast_channel();let mut receiver: BroadcastReceiver<Vec<u8>> = broadcast.subscribe();loop {tokio::select! {request_res = ctx.websocket_request_from_stream(10000) => {if request_res.is_err() {break;}let request = request_res.unwrap_or_default();let body: RequestBody = request.get_body().clone();if broadcast.send(body).is_err() {break;}},msg_res = receiver.recv() => {if let Ok(msg) = msg_res {if ctx.send_response_body(msg).await.is_err() || ctx.flush().await.is_err() {break;}}}}}
}

客户端代码示例(JavaScript)

以下是一个基于浏览器环境的 WebSocket 客户端示例,每秒发送当前时间到服务器,并输出收到的广播消息。

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');
};

总结

通过 hyperlane,你可以轻松构建基于 WebSocket 的实时服务,无需手动处理握手与协议细节。借助统一的 send_response_body 接口,你可以使用与 HTTP 一致的方式处理 WebSocket 消息,极大简化开发体验。

http://www.dtcms.com/wzjs/481706.html

相关文章:

  • 公司商城网站建设c++培训班学费一般多少
  • 天津市城市建设学校官方网站百度权重查询工具
  • 做乡村旅游的网站网站运营一个月多少钱
  • 做微网站 主机 域名网站seo优化推广外包
  • 免费拒绝收费网站百度广告代理公司
  • 工装网站建设方案厦门网站建设公司名单
  • 专门做高仿的网站最近国际新闻大事20条
  • wordpress怎么修改固定链接百度seo排名点击器
  • 网站右侧客服代码seo免费视频教程
  • 北京网站制作公司排名网站运营课程
  • 沈阳市于洪区建设局网站域名查询访问
  • 上海的加盟网站建设google下载安卓版下载
  • 为什么大公司不用c 做网站百度手机关键词排名工具
  • 外贸社交网站排名免费入驻的电商平台
  • 怎么做外贸网站seo如何优化一个网站
  • 苏州工业园区两学一做网站百度网络小说排行榜
  • 刚做的网站为什么搜索不到长沙疫情最新消息今天封城了
  • 暴力破解wordpressseo大全
  • 企业网站备案 淘宝客免费学生网页制作成品
  • 国家建设部网站平台海底捞口碑营销案例
  • 网站上的图片格式怎么做宁波seo搜索排名优化
  • 梅州做网站企业邮箱
  • 最好的网站建设免费的aso优化的主要内容为
  • 做美食哪些类型网站如何制作自己的网页
  • 专业网站优化关键词上海网站关键词排名优化报价
  • 做网站上海产品推广营销
  • 温州网站建设推广专家关键词优化方法
  • 一般人公司注册费用湖北seo公司
  • 织梦网站footer美化seo薪酬如何
  • 个人网站可以做app吗百度旗下有哪些app