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

Rust实现黑客帝国数字雨特效

基于 Rust 和 actix-web 框架

以下是一些基于 Rust 和 actix-web 框架的数字下雨(类似黑客帝国风格的字符动画)的实现示例。这些例子展示了不同的实现方式,从基础到进阶,涵盖了 WebSocket、SSE(Server-Sent Events)和静态渲染等技术。


基础数字下雨(静态渲染)

一个简单的数字下雨效果,通过生成随机字符并渲染为 HTML 页面:

use actix_web::{get, App, HttpResponse, HttpServer, Responder};
use rand::Rng;#[get("/")]
async fn digital_rain() -> impl Responder {let mut rng = rand::thread_rng();let mut rain = String::new();for _ in 0..100 {let c = rng.gen_range(33..126) as u8 as char;rain.push(c);}HttpResponse::Ok().body(format!("<pre style='color:#0f0;background:#000;font-family:monospace;'>{}</pre>", rain))
}#[actix_web::main]
async fn main() -> std::io::Result<()> {HttpServer::new(|| App::new().service(digital_rain)).bind("127.0.0.1:8080")?.run().await
}

运行结果:


WebSocket 数字下雨

使用 WebSocket 实时推送数字下雨效果:

use actix::{Actor, StreamHandler};
use actix_web::{web, App, Error, HttpRequest, HttpResponse, HttpServer};
use actix_web_actors::ws;
use rand::Rng;struct DigitalRainWs;impl Actor for DigitalRainWs {type Context = ws::WebsocketContext<Self>;
}impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for DigitalRainWs {fn handle(&mut self, msg: Result<ws::Message, ws::ProtocolError>, ctx: &mut Self::Context) {match msg {Ok(ws::Message::Ping(msg)) => ctx.pong(&msg),Ok(ws::Message::Text(_)) => {let mut rng = rand::thread_rng();let mut rain = String::new();for _ in 0..100 {let c = rng.gen_range(33..126) as u8 as char;rain.push(c);}ctx.text(rain);}_ => (),}}
}async fn ws_index(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {let resp =
http://www.lryc.cn/news/579213.html

相关文章:

  • CppCon 2018 学习:Feather: A Modern C++ Web Development Framework
  • FPGA的开发流程
  • 旋转不变子空间( ESPRIT) 算法
  • 基于SpringBoot的场地预定管理系统
  • 新版本没有docker-desktop-data分发 | docker desktop 镜像迁移
  • 当AR遇上深度学习:实时超声肾脏分割与测量技术全解析
  • FastAPI 安装使用教程
  • 人脸活体识别3:C/C++实现人脸眨眼 张嘴 点头 摇头识别(可实时检测)
  • 回顾JAVA中的锁机制
  • 重塑智能体决策路径:深入理解 ReAct 框架
  • WPF路由事件:冒泡、隧道与直接全解析
  • 嵌入式软件面经(四)Q:请说明在 ILP32、LP64 与 LLP64 三种数据模型下,常见基本类型及指针的 sizeof 值差异,并简要解释其原因
  • 软件开发早期阶段,使用存储过程的优势探讨:敏捷开发下的利器
  • 【C++】--入门
  • 欧拉角、四元数和旋转矩阵的变换关系以及无人机的坐标变换
  • 如何在Excel中每隔几行取一行
  • sqlmap学习笔记ing(3.[MoeCTF 2022]Sqlmap_boy,cookie的作用)
  • LeetCode Hot 100 滑动窗口 【Java和Golang解法】
  • 鸿蒙开发技巧---去除字符串两端的空格
  • AI大模型如何重塑软件开发流程?从自动化革命到人机共生范式
  • 怎样理解:source ~/.bash_profile
  • 深入Flink核心概念:解锁大数据流处理的奥秘
  • SAP WM LT10 TO创建增强
  • Android Auto即将带来变革
  • Agno(一)
  • 机器学习在智能制造业中的应用:质量检测与设备故障预测
  • Vue + RuoYi 前后端分离入门手册
  • Ubuntu云服务器上部署发布Vite项目
  • Redis基础(1):NoSQL认识
  • 端到端自动驾驶系统关键技术