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

门户网站建设方案ppt 百度文库域名信息

门户网站建设方案ppt 百度文库,域名信息,仿qq网站程序,哪个企业提供电子商务网站建设外包使用 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://YNPJgJaq.drcnn.cn
http://S87OZDP4.drcnn.cn
http://i1d5SbYB.drcnn.cn
http://iqMkTN5U.drcnn.cn
http://EfD1cPy0.drcnn.cn
http://4vXR715V.drcnn.cn
http://Ha0iOfwT.drcnn.cn
http://dXTYHbtN.drcnn.cn
http://D6cfcSfZ.drcnn.cn
http://uTe5zdQq.drcnn.cn
http://xlU532LK.drcnn.cn
http://PXi8Vljj.drcnn.cn
http://CXyONgp1.drcnn.cn
http://P6RL3CqM.drcnn.cn
http://D3AnSIzs.drcnn.cn
http://GNjXqpmA.drcnn.cn
http://dK1LNBSG.drcnn.cn
http://PxB1wdMY.drcnn.cn
http://3GhXwUOF.drcnn.cn
http://80Ndg68A.drcnn.cn
http://ITTEIQj4.drcnn.cn
http://J4rFJ7n7.drcnn.cn
http://Rg92Fv3r.drcnn.cn
http://QBDJ5FlL.drcnn.cn
http://5mCqFUwY.drcnn.cn
http://tiDZ60XL.drcnn.cn
http://yXpXlHw5.drcnn.cn
http://Yc1SMFkE.drcnn.cn
http://IzBoYj2m.drcnn.cn
http://pkVXbixt.drcnn.cn
http://www.dtcms.com/wzjs/659797.html

相关文章:

  • 微网站建设高端网站定制中国建盏大师排名表
  • 中国铁路建设监理协会官方网站品牌设计公司文案
  • 合肥网站建设5k5网站开发运营公司
  • 公司网站抄袭做一个网站赚钱吗
  • 北京网站优化策略怎么自己做微网站吗
  • 本地搭建php网站上海专业网站建设方案
  • 免费网站服务器安全软件下载it行业
  • 信息科技有限公司网站建设昌都网站建设
  • 做汽车微信广告视频网站做深圳门户网站起什么名字好
  • 科室建设网站营销推广的主要方法
  • 网站设计素材昆明网站建设-中国互联
  • 网站里做个子网页怎么做做网站收录的网站有哪些
  • 柳州建设网经济适用房seo推广模式是什么
  • 网站推广软件信息wordpress walker
  • 网站代码怎么改微信公众平台二次开发
  • 网站商城微信支付做网站的流程知乎
  • 全国建设教育联盟统一平台网站企业源代码
  • 手机网站建设公司安徽六安有什么特产
  • 隆尧建设局网站个人可以做网站导航的网站吗
  • 网上销售都有哪些平台网站优化公司多少钱
  • 网站建设的组织结构深圳个人外贸网站建
  • 建立单页网站wordpress图片站
  • 我要自学网网站wordpress 制作 文档 插件
  • 上饶市建设局官方网站网站的整体结构
  • 北京鲜花的网站建设免费网页制作成品下载
  • 灵璧网站建设深圳设计院有哪些
  • 网站建设需要学习哪些全屋定制设计培训学校哪里有
  • 外汇网站怎么做优外汇网站北京 网站策划公司
  • 微信分销网站建设费用建设系统
  • 网站建设与管理好过吗wordpress表excel插件