当前位置: 首页 > 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.dtcms.com/a/264871.html

相关文章:

  • 软件开发早期阶段,使用存储过程的优势探讨:敏捷开发下的利器
  • Spark从入门到熟悉(篇二)
  • Xbox One 控制器转换为 macOS HID 设备的工作原理分析
  • Ubuntu云服务器上部署发布Vite项目
  • 阿里云实时语音识别
  • 无线网络标准信道宽度参数速查
  • 人体属性识别+跌倒检测:儿童行为监测与安全升级
  • 【构造】P8976 「DTOI-4」排列|普及+
  • 2025最新全球AI大模型排名 国内外模型动态洗牌
  • 【Linux】不小心又创建了一个root权限账户,怎么将它删除?!
  • Linux 后台启动java jar 程序 nohup java -jar
  • PHP Yii2 安装SQL Server扩展-MAC M4 Pro芯片
  • 在mac下手动编译迁移的android版webrtc组件
  • 信息论与编码期末重点
  • 板凳-------Mysql cookbook学习 (十一--------2)
  • 代码训练LeetCode(44)螺旋矩阵
  • 电脑一体机,收银机画面显示不全——深入解析 BIOS 配置电脑分辨率——东方仙盟
  • 「ECG信号处理——(20)基于心电和呼吸的因果分析模型」2025年7月2日
  • GC393低功耗双电压比较器:精准、高效的信号处理解决方案
  • Liunx 操作系统笔记4
  • MFC扩展库BCGControlBar Pro v36.2亮点:Ribbon Bar、表单等组件升级
  • Notepad++ 复制宏、编辑宏的方法
  • 微信小程序使用wx.chooseImage上传图片时进行压缩,并添加时间水印
  • HarmonyOS 页面路由Router切换组件导航Navigation
  • (第三篇)HMTL+CSS+JS-新手小白循序渐进案例入门
  • Axure常用交互功能案例-免费
  • 物联网实战:多语言(Java、Go、Rust、C++、C#、Rust)设备接入与数据处理
  • 嵌入式系统内核镜像相关(十)
  • 「日拱一码」015 机器学习常用库——scikit-learn
  • Deep semi-supervised learning for medical image segmentation: A review