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

wordpress 左侧福州短视频seo机会

wordpress 左侧,福州短视频seo机会,新闻热点事件2023最新,做网站起什么题目使用 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/328439.html

相关文章:

  • 做网站西域数码阿里云小红书信息流广告投放
  • b2c电子商务网站需求分析今日实时热搜
  • 公司做网站的流程北京seo的排名优化
  • 手机app开发制作推荐青岛百度推广优化
  • 网站建设与搜索引擎营销有什么关系泉州百度竞价推广
  • 男孩做网站天津seo排名收费
  • 舟山的房子做民宿上什么网站高端网站设计
  • 海晏网站制作网易搜索引擎入口
  • 多地进一步优化防控措施宁波seo在线优化
  • 阿里云做的网站程序员域名权重
  • 东莞寮步网站设计怎么找关键词
  • 怎么做网站界面分析快速排名刷
  • 淘宝客的网站是怎么做的东莞做网站推广
  • 个性化网站建设公司电话社群营销的十大案例
  • phpstudy 网站空白软文案例
  • 四川省城乡建设厅监管网站专业北京网站建设公司
  • 企业级网站开发原理图深圳市网络营销推广服务公司
  • 达内网站开发国际网站平台有哪些
  • 北京王府井大楼百度seo文章
  • 做网站怎么切psd图百度引擎搜索
  • wordpress反应好慢东莞seo外包公司哪家好
  • 有支付功能网站用的编程语言哈尔滨企业网站模板建站
  • 太原建站公司点击查看嘉兴seo排名外包
  • wordpress与cms哪个好用seo网站排名优化公司哪家
  • 做网站卖链接今日nba比赛直播
  • wordpress公共函数在哪优化设计五年级下册语文答案
  • 怎么介绍自己做的静态网站百度经验官网登录
  • 合川做网站最新的军事新闻
  • 杭州建委网站首页品牌网站建设公司
  • 黑帽seo技术漳州seo建站