【Rust光年纪】探索Rust语言中的WebSocket库和框架:优劣一览
Rust语言中的实时通信利器:WebSocket库与框架全面解析
前言
随着Rust语言的不断发展,其在Web开发领域也变得越来越受欢迎。WebSocket作为实现实时通信的重要技术,在Rust的生态系统中也有多个库和框架提供了支持。本文将介绍几个主流的Rust WebSocket库及相关框架,帮助读者了解它们的核心功能、安装配置以及API概览。
欢迎订阅专栏:Rust光年纪
文章目录
- Rust语言中的实时通信利器:WebSocket库与框架全面解析
- 前言
- 1. tokio-tungstenite:一个用于Rust语言的WebSocket库
- 1.1 简介
- 1.1.1 核心功能
- 1.1.2 使用场景
- 1.2 安装与配置
- 1.2.1 安装指南
- 1.2.2 基本配置
- 1.3 API 概览
- 1.3.1 WebSocket连接管理
- 1.3.2 消息传输
- 2. actix-web-web-sockets:一个用于Rust语言的WebSocket库
- 2.1 简介
- 2.1.1 核心功能
- 2.1.2 使用场景
- 2.2 安装与配置
- 2.2.1 安装指南
- 2.2.2 基本配置
- 2.3 API 概览
- 2.3.1 WebSocket连接管理
- 2.3.2 消息传输
- 3. Yew: 一个现代化的Rust前端框架,提供了WebSocket支持
- 3.1 简介
- 3.1.1 核心功能
- 3.1.2 使用场景
- 3.2 安装与配置
- 3.2.1 安装指南
- 3.2.2 基本配置
- 3.3 API 概览
- 3.3.1 组件通信
- 3.3.2 WebSocket集成
- 4.2.2 基本配置
- 4.3 API 概览
- 4.3.1 路由管理
- 4.3.2 WebSocket处理
- 5. Rocket:一个基于Rust语言的简单、快速的Web框架,可集成WebSocket
- 5.1 简介
- 5.1.1 核心功能
- 5.1.2 使用场景
- 5.2 安装与配置
- 5.2.1 安装指南
- 5.2.2 基本配置
- 5.3 API 概览
- 5.3.1 路由定义
- 5.3.2 WebSocket支持
- 6. MoonZoon:一个使用Rust编写的全栈Web框架,包含了对WebSocket的支持
- 6.1 简介
- 6.1.1 核心功能
- 6.1.2 使用场景
- 6.2 安装与配置
- 6.2.1 安装指南
- 6.2.2 基本配置
- 6.3 API 概览
- 6.3.1 数据流管理
- 6.3.2 WebSocket集成
- 总结
1. tokio-tungstenite:一个用于Rust语言的WebSocket库
1.1 简介
tokio-tungstenite是一个基于tokio异步运行时的WebSocket库,适用于Rust语言。它提供了一系列功能强大的API,帮助开发者快速构建高性能的WebSocket应用程序。
1.1.1 核心功能
- 支持WebSocket协议的建立和管理
- 提供异步消息处理和发送
- 支持自定义消息处理逻辑
- 处理连接的异步任务调度
1.1.2 使用场景
tokio-tungstenite适合用于需要高效处理WebSocket连接的场景,包括但不限于:
- 在线聊天应用
- 实时数据传输应用
- 游戏服务器
- 股票交易数据推送
1.2 安装与配置
1.2.1 安装指南
你可以通过Cargo.toml文件将tokio-tungstenite集成到你的项目中:
[dependencies]
tokio-tungstenite = "0.15"
1.2.2 基本配置
在使用tokio-tungstenite之前,需要确保你已经正确地设置了tokio异步运行时环境,并且安装了相关依赖。
1.3 API 概览
1.3.1 WebSocket连接管理
tokio-tungstenite提供了WebSocket连接的管理和维护功能,可以轻松地建立、关闭和管理多个连接。
use tokio::net::TcpListener;
use tokio_tungstenite::accept_async;#[tokio::main]
async fn main() {let addr = "127.0.0.1:9001";let listener = TcpListener::bind(&addr).await.unwrap();while let Ok((stream, _)) = listener.accept().await {tokio::spawn(async move {if let Ok(ws) = accept_async(stream).await {// 处理新的WebSocket连接}});}
}
1.3.2 消息传输
tokio-tungstenite支持异步消息传输,可以方便地接收和发送WebSocket消息。
use tokio::net::TcpStream;
use tokio_tungstenite::{connect_async, tungstenite::Message};#[tokio::main]
async fn main() {let url = "ws://127.0.0.1:9001";let (stream, _) = TcpStream::connect(url).await.unwrap();let (mut write, mut read) = connect_async(stream).await.unwrap().split();// 发送消息write.send(Message::Text("Hello, WebSocket!".into())).await.unwrap();// 接收消息while let Some(msg) = read.next().await {let msg = msg.unwrap();// 处理接收到的消息}
}
以上是tokio-tungstenite库的基本介绍以及部分API示例。你可以在tokio-tungstenite的官方文档中找到更多详细的信息和示例代码。
2. actix-web-web-sockets:一个用于Rust语言的WebSocket库
2.1 简介
2.1.1 核心功能
actix-web-web-sockets 提供了在 Rust 中处理 WebSocket 的能力,包括创建 WebSocket 连接、管理连接状态、处理消息传输等核心功能。
2.1.2 使用场景
适用于需要在 Rust 项目中实现实时通讯功能的场景,比如聊天应用、实时数据展示等。
2.2 安装与配置
2.2.1 安装指南
首先,在你的 Cargo.toml
文件中添加以下依赖:
[dependencies]
actix-web = "x.x.x"
actix-web-actors = "x.x.x"
然后执行 cargo build
安装依赖包。
2.2.2 基本配置
在你的 Rust 项目中引入 actix-web-web-sockets:
use actix_web::{web, App, HttpServer};
use actix_web_actors::ws;async fn ws_index(r: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {// 处理 WebSocket 连接
}fn main() -> std::io::Result<()> {HttpServer::new(|| {App::new().service(web::resource("/ws/").route(web::get().to(ws_index))}).bind("127.0.0.1:8080")?.run()
}
2.3 API 概览
2.3.1 WebSocket连接管理
通过 actix-web-web-sockets,可以轻松地管理 WebSocket 连接,例如监听连接事件、关闭连接等操作。
async fn ws_index(r: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {let res = ws::start(MyWebSocket, &r, stream);res
}
2.3.2 消息传输
actix-web-web-sockets 也提供了方便的消息传输方法,例如发送和接收消息等操作。
struct MyWebSocket;impl Actor for MyWebSocket {type Context = ws::WebsocketContext<Self>;fn started(&mut self, ctx: &mut Self::Context) {// WebSocket 连接已建立}fn stopped(&mut self, ctx: &mut Self::Context) {// WebSocket 连接已关闭}
}impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for MyWebSocket {fn handle(&mut self, msg: Result<ws::Message, ws::ProtocolError>, ctx: &mut Self::Context) {match msg {Ok(ws::Message::Ping(msg)) => {// 处理 Ping 消息}Ok(ws::Message::Text(text)) => {// 处理文本消息ctx.text(text);}Ok(ws::Message::Binary(bin)) => {// 处理二进制消息ctx.binary(bin);}_ => (),}}
}
以上是关于 actix-web-web-sockets 的简介、安装配置指南以及 API 概览的内容。您可以在 actix-web-web-sockets GitHub 获取更多详细信息。
3. Yew: 一个现代化的Rust前端框架,提供了WebSocket支持
3.1 简介
3.1.1 核心功能
Yew是一个现代化的Rust前端框架,旨在提供可靠且高效的Web应用程序开发体验。Yew框架提供了WebSocket支持,使得在Web应用中轻松实现实时通信成为可能。
3.1.2 使用场景
WebSocket在Web应用程序中的使用场景非常广泛,特别是在需要实时更新数据或进行实时通信的情况下。例如,在线聊天应用、实时数据监控和多人协作编辑等场景都可以通过WebSocket来实现。
3.2 安装与配置
3.2.1 安装指南
要使用Yew框架的WebSocket支持,首先需要在项目中添加Yew作为依赖项。可以在Cargo.toml文件中添加以下内容:
[dependencies]
yew = "0.18"
然后运行以下命令安装依赖:
$ cargo build
3.2.2 基本配置
在项目中使用WebSocket时,需要在页面中引入WebSocket相关的模块。可以使用use yew::services::websocket::{WebSocketService, WebSocketStatus, WebSocketTask};
来引入WebSocket相关的服务和任务。
3.3 API 概览
3.3.1 组件通信
Yew框架提供了一套完善的组件通信机制,可以实现父子组件间、兄弟组件间的通信。这使得在Web应用中,各个组件可以相互协作,实现更复杂的功能。
3.3.2 WebSocket集成
Yew框架提供了对WebSocket的集成支持,使得在项目中使用WebSocket变得十分简单。以下是一个简单示例,演示了如何在Yew框架中使用WebSocket进行实时通信。
use yew::prelude::*;
use yew::services::websocket::{WebSocketService, WebSocketStatus, WebSocketTask};
use yew::format::Json;struct Model {link: ComponentLink<Self>,ws_service: WebSocketService,ws: Option<WebSocketTask>,
}enum Msg {WebSocketStatus(WebSocketStatus),
}impl Component for Model {type Message = Msg;type Properties = ();fn create(_: Self::Properties, link: ComponentLink<Self>) -> Self {let callback = link.callback(Msg::WebSocketStatus);let ws_service = WebSocketService::new();let ws = ws_service.connect("wss://echo.websocket.org", callback).ok();Model {link,ws_service,ws,}}fn update(&mut self, msg: Self::Message) -> ShouldRender {match msg {Msg::WebSocketStatus(status) => {match status {WebSocketStatus::Opened => {// WebSocket连接已经建立,可以发送消息了if let Some(ref ws) = self.ws {ws.send(Json(&"Hello, WebSocket!"));}}WebSocketStatus::Closed | WebSocketStatus::Error => {// WebSocket连接已关闭或发生错误}}}}true}fn change(&mut self, _props: Self::Properties) -> ShouldRender {false}fn view(&self) -> Html {html! {<div><p>{"WebSocket Status: "}{match &self.ws {Some(ws) => match ws.status() {WebSocketStatus::Connecting => "Connecting",WebSocketStatus::Open => "Open",WebSocketStatus::Closing => "Closing",WebSocketStatus
# WebSocket## 4. Warp:一个轻量级的基于Rust语言的Web框架,具有内置的WebSocket支持### 4.1 简介Warp是一个简单、高性能的基于Rust语言的Web框架,具有内置的WebSocket支持。它提供了一种方便的方式来处理HTTP请求和WebSocket连接,并且非常适合构建实时交互式应用程序。#### 4.1.1 核心功能Warp的核心功能包括:- 高性能的HTTP请求处理
- 内置的WebSocket支持
- 灵活的路由管理#### 4.1.2 使用场景Warp适用于开发需要处理实时交互的Web应用程序,例如在线聊天应用、实时数据可视化等。### 4.2 安装与配置#### 4.2.1 安装指南你可以通过Cargo来安装Warp框架,首先要在你的`Cargo.toml`文件中添加以下依赖:```toml
[dependencies]
warp = "0.3"
然后使用以下命令进行安装:
cargo build
4.2.2 基本配置
Warp框架不需要太多的配置,只需在代码中引入相应的模块即可开始使用。
use warp::Filter;#[tokio::main]
async fn main() {// Your warp routes here
}
4.3 API 概览
4.3.1 路由管理
Warp使用过滤器(Filter)来管理路由,以下是一个简单的GET请求处理示例:
use warp::Filter;#[tokio::main]
async fn main() {let hello = warp::path!("hello" / String).map(|name| format!("Hello, {}!", name));warp::serve(hello).run(([127, 0, 0, 1], 3030)).await;
}
更多关于路由管理的信息,请参考 Warp官方文档
4.3.2 WebSocket处理
Warp提供了方便的方法来处理WebSocket连接,以下是一个简单的WebSocket示例:
use warp::Filter;#[tokio::main]
async fn main() {let ws_route = warp::path("websocket").and(warp::ws()).map(|ws: warp::ws::Ws| {ws.on_upgrade(|websocket| async {// Handle the WebSocket connection here})});warp::serve(ws_route).run(([127, 0, 0, 1], 3030)).await;
}
更多关于WebSocket处理的信息,请参考 Warp官方文档
通过以上内容,你已经了解到了Warp框架的基本安装和使用方法,以及如何处理HTTP请求和WebSocket连接。希望对你有所帮助!
5. Rocket:一个基于Rust语言的简单、快速的Web框架,可集成WebSocket
5.1 简介
Rocket 是一个基于 Rust 语言的 Web 框架,提供了简单、快速的方式来构建 Web 应用,并且可以方便地集成 WebSocket。
5.1.1 核心功能
Rocket 提供了路由定义、中间件、请求处理等核心功能,并且支持 WebSocket,使得在 Rust 中实现 WebSocket 功能变得更加简单。
5.1.2 使用场景
Rocket 适用于构建各种规模的 Web 应用程序,包括需要 WebSocket 功能的应用场景。
5.2 安装与配置
使用 Rocket 框架前需要进行安装和基本配置。
5.2.1 安装指南
首先需要在项目的 Cargo.toml
文件中添加 Rocket 的依赖:
[dependencies]
rocket = "0.5.0-rc.1"
然后在项目根目录创建一个名为 main.rs
的文件,引入 Rocket 库并启动应用。具体安装步骤和示例可参考 Rocket 官方文档。
5.2.2 基本配置
Rocket 的基本配置包括路由定义、中间件的使用等,针对 WebSocket 还需要特定的配置,下面将详细介绍 WebSocket 的支持。
5.3 API 概览
下面将介绍 Rocket 中 WebSocket 的相关 API 和用法。
5.3.1 路由定义
Rocket 使用宏来定义路由,以下是一个简单的路由定义示例:
#[get("/")]
fn index() -> &'static str {"Hello, World!"
}
这里的 #[get("/")]
定义了一个 GET 请求的路由,其中 /
是路由的路径。更多关于路由定义的内容请参考 Rocket 官方文档。
5.3.2 WebSocket支持
Rocket 集成了 WebSocket 支持,可以通过 WebSocket
结构体和 .register
方法来定义 WebSocket 路由。以下是一个简单的 WebSocket 定义示例:
use rocket::{get, routes};
use rocket::response::content;#[get("/chat")]
async fn chat() -> content::Html<String> {content::Html("<h1>WebSocket Chat</h1>".to_string())
}#[launch]
fn rocket() -> _ {rocket::build().mount("/", routes![chat])
}
上面代码中,chat()
函数定义了一个 WebSocket 路由,使用 content::Html
返回类型,当客户端连接到 /chat
时会返回一个包含 “WebSocket Chat” 的 HTML 页面,这个页面可以用来建立 WebSocket 连接。更多关于 WebSocket 的内容请参考 Rocket 官方文档。
通过以上内容,你可以了解到 Rocket 框架以及如何在 Rocket 中集成 WebSocket 功能。
6. MoonZoon:一个使用Rust编写的全栈Web框架,包含了对WebSocket的支持
MoonZoon是一个新兴的全栈Web框架,它使用Rust语言编写,提供了对WebSocket的支持,使得实时数据传输变得更加便捷和高效。
6.1 简介
MoonZoon主要特点在于其全栈能力和对实时数据传输的支持。下面我们将会详细介绍MoonZoon的核心功能以及适用的场景。
6.1.1 核心功能
MoonZoon的核心功能包括:
- 前端与后端集成
- 实时数据传输(包括WebSocket支持)
- 强大的Rust语言支持
- 灵活的组件系统
这些功能使得MoonZoon成为一个非常有潜力的全栈Web框架。
6.1.2 使用场景
MoonZoon适用于需要实时数据传输的Web应用程序,比如在线游戏、实时监控系统、即时通讯应用等。
6.2 安装与配置
在这一部分,我们将会介绍如何安装MoonZoon并进行基本的配置。
6.2.1 安装指南
你可以通过Cargo来安装MoonZoon,首先需要在你的项目中添加MoonZoon的依赖:
[dependencies]
moonzoon = "0.3.0"
然后执行以下命令进行安装:
$ cargo build
6.2.2 基本配置
在你的Rust项目中,你可以通过以下方式引入MoonZoon:
use moonzoon;
6.3 API 概览
接下来我们将会对MoonZoon的API进行概览,包括数据流管理和WebSocket集成。
6.3.1 数据流管理
MoonZoon提供了简洁而强大的数据流管理功能,使得前端与后端的数据传输变得更加高效和易于管理。你可以通过以下代码示例来对数据流进行操作:
// 创建一个名为"counter"的数据流
let counter = moonzoon::state(|| 0);// 更新数据流中的值
counter.set(10);
更多关于数据流管理的内容,你可以访问MoonZoon的官方文档。
6.3.2 WebSocket集成
MoonZoon对WebSocket的集成也非常简单,你可以轻松地创建WebSocket连接,并进行实时数据传输。以下是一个简单的WebSocket示例:
// 创建WebSocket连接
let ws = moonzoon::websocket::connect("wss://yourserver.com/socket");// 发送消息
ws.send("Hello, MoonZoon!");// 监听消息
ws.on_message(|msg| {println!("Received message: {}", msg);
});
更多关于WebSocket集成的内容,你可以访问MoonZoon的官方文档。
总结
通过本文的介绍,读者可以全面了解到Rust语言中几个主要的WebSocket库及相关框架,包括它们的核心功能、使用场景、安装配置以及API概览。不同的库和框架在实现上有各自的特点,选择合适的工具可以帮助开发者更高效地实现WebSocket功能,同时也能更好地满足项目的需求。
相关文章:
【Rust光年纪】探索Rust语言中的WebSocket库和框架:优劣一览
Rust语言中的实时通信利器:WebSocket库与框架全面解析 前言 随着Rust语言的不断发展,其在Web开发领域也变得越来越受欢迎。WebSocket作为实现实时通信的重要技术,在Rust的生态系统中也有多个库和框架提供了支持。本文将介绍几个主流的Rust …...
HTML 基础结构
目录 1. 文档声明 2. 根标签 3. 头部元素 4. 主题元素 5. 注释 6. 演示 1. 文档声明 <!DOCTYPE html>:声明文档类型,表示该文档是 html 文档, 2. 根标签 (1)所有的其他标签都要放在一对根标签中&#…...
多页合同怎么盖骑缝章_电子合同怎么盖骑缝章?
多页合同怎么盖骑缝章?电子合同怎么盖骑缝章? 对于纸质多页合同,盖骑缝章是一种常见的做法,用于确保合同的完整性,防止任何页面被替换或篡改。以下是盖骑缝章的基本步骤: 将所有合同页面平铺在桌面上。用…...
GD 32 IIC通信协议
前言: ... 通信方式 通信方式分为串行通信和并行通信。常见的串口就是串行通信的方式 常用的串行通信接口 常用的串行通信方式有USART,IIC,USB,CAN总线 同步与异步 同步通信:IIC是同步通信,有两个线一个是时钟信号线,一个数数据…...
Spring Task初学
介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 为什么要在Java程序中使用Spring Task? 运行效果 cron表达式:一般日和周不会同时出现 入门案例 启动类添加注解EnableScheduling开始任务调度 创建MyTask类…...
决策树可解释性分析
决策树可解释性分析 决策树是一种广泛使用的机器学习算法,以其直观的结构和可解释性而闻名。在许多应用场景中,尤其是金融、医疗等领域,模型的可解释性至关重要。本文将从决策路径、节点信息、特征重要性等多个方面分析决策树的可解释性&…...
BUGKU-WEB never_give_up
解题思路 F12查看请求和响应,查找线索 相关工具 base64解码URL解码Burp Suit抓包 页面源码提示 <!--1p.html--> 2. 去访问这个文件,发现直接跳转到BUGKU首页,有猫腻那就下载看看这个文件内容吧 爬虫下载这个文件 import requests …...
hive自动安装脚本
使用该脚本注意事项 安装hive之前确定机子有网络。或者yum 更改为本地源,因为会使用epel仓库下载一个pv的软件使用该脚本前提是自行安装好mysql数据库准备好tomcat软件包,该脚本使用tomcat9.x版本测试过能正常执行安装成功,其他版本没有测试…...
unix 用户态 内核态
在UNIX操作系统中,"用户态"和"内核态"是两种不同的运行模式,它们定义了程序在执行时的权限级别: 用户态(User Mode): 用户态是程序运行的常规状态,大多数应用程序在执行时…...
GD32 IAP升级——boot和app相互切换
GD32 IAP升级——boot和app相互切换 目录 GD32 IAP升级——boot和app相互切换1 Keil工程设置1.1 修改ROM1.2 Keil烧录配置 2 代码编写2.1 app跳转2.2 软件重启2.3 app中断向量表偏移 结束语 1 Keil工程设置 1.1 修改ROM GD32内部Flash是一整块连续的内存,但是因为…...
C++11革新之旅:探索C++编程的无限可能
C11革新之旅:探索C编程的无限可能 C11,作为C语言的一个重要标准,为C编程带来了革命性的变革。它不仅引入了众多新特性和改进,还极大地增强了C的表达能力、提高了程序的性能和资源利用率。本文将从多个方面深入探讨C11的新特性&am…...
免费自动化AI视频剪辑工具
下载地址:https://pan.quark.cn/s/3c5995da512e FunClip是一款完全开源、本地部署的自动化视频剪辑工具,通过调用阿里巴巴通义实验室开源的FunASR Paraformer系列模型进行视频的语音识别,随后用户可以自由选择识别结果中的文本片段或说话人&a…...
Linux中安装C#的.net,创建运行后端或控制台项目
安装脚本命令: 创建一个sh文件并将该文件更改权限运行 sudo apt update wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get upd…...
最长上升子序列LIS(一般+优化)
1. 题目 题目链接: B3637 最长上升子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 输入样例: 6 1 2 4 1 3 4 输出样例: 4 说明/提示: 分别取出 1、2、3、4 即可。 2. 具体实现 2.1 一般做法 dp[i]表示第i个位置的…...
【Python系列】Python 协程:并发编程的新篇章
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
详解C/C++输入输出
前言 C/C输入输出很多,在不同的情况会用不同的输入输出,有的题目在输入时可能换一种输入输出就能不会TLE,有的输入可能要循环输入,但是可以换一种输入直接就能把所有数据输入进去。C/C有哪些常用的输入输出,在什么时候…...
AI人工智能开发环境配置
AI人工智能 为什么使用Python来开发AI 人工智能被认为是未来的趋势技术。 已经有了许多应用程序。 因此,许多公司和研究人员都对此感兴趣。 但是这里出现的主要问题是,在哪种编程语言中可以开发这些 AI 应用程序? 有各种编程语言,…...
Tomcat 8.5 下载、安装、启动及各种问题
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 本期内容主要介绍 Tomcat 8 的安装,以及可能会遇到的问题 文章目录 1. Tomcat 安装2. 可能会遇到的问题2.…...
Harbor系列之5:复制管理
Harbor的镜像复制功能 Harbor 提供镜像复制功能,允许用户以推送和拉取方式在不同 Harbor 仓库之间,以及 Harbor 与非 Harbor 仓库间(如Alibaba ACR、Quay、Aws ECR、Azu热ACR、Docker Registry、Docker Hub等)复制 image、chart …...
V.PS德国VPS详细测评
V.PS的德国机房位于法兰克福,默认接入电信CN2 GIA、联通CUII网络,针对中国大陆进行路由优化处理的。而且是强制移动走联通的CUII链路,确保三网都处在轻负载的网络环境下。 CPU是Intel Xeon Gold 6133 ,启用了BBR,归属德…...
【Vue3】组件通信之自定义事件
【Vue3】组件通信之自定义事件 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋…...
[CTF]-PWN:ORW题型综合解析
经典ORW: 例题(极客大挑战 2019 Not Bad): 这里使用mmap函数创造了一个内存映射区域 从地址0x123000开始,大小位0x1000 权限为可写可执行(可读0x1,可写0x2,可执行0x3)…...
VSCode中yarn的安装和使用
VSCode只要是做前端的,大家都不陌生,就不讲其使用了。 Yarn是一款高效、可靠的JavaScript包管理器,与NPM类似,但有其独特的优势,如更高效的安装速度、更好的依赖管理等 要在VSCode中使用Yarn,需要按照以…...
Java后端面试复习7.23
进程和线程线程优先级线程状态线程构造方式三种推荐用哪种为什么线程中断调用什么方法,本线程怎检查为什么线程不应强制停止线程通信方式四种ThreadLocalFUtureTask线程礼让终止线程的另一个缺陷(锁)守护线程什么时候设置为守护县城sleep&…...
Arduino PID库 (2) –微分导致的过冲
Arduino PID库 (2) – Derivative Kick 参考:手把手教你看懂并理解Arduino PID控制库——微分冲击 pid内容索引-CSDN博客 Arduino PID库 (1)– 简介 问题 此修改将稍微调整derivative term。目标是消除一种称为“…...
基于强化学习算法玩CartPole游戏
什么事CartPole游戏 CartPole(也称为倒立摆问题)是一个经典的控制理论和强化学习的基础问题,通常用于测试和验证控制算法的性能。具体来说,它是一个简单的物理模拟问题,其目标是通过在一个平衡杆(倒立摆&a…...
uniapp0基础编写安卓原生插件和调用第三方jar包(Ch34的jar包)和如何解决android 如何Application初始化
前言 我假设你会uniapp安卓插件开发了,如果不会请看这篇文章,这篇文章是0基础教学。 这篇文章我们将讲一下如何使用CH34XUARTDriver.jar进行开发成uniapp插件。 它的难点是:uniapp如何Application初始化第三方jar包 先去官网下载CH340/CH341的USB转串口安卓免驱应用库:h…...
使用Leaflet进行船舶航行警告区域绘制实战
目录 前言 一、坐标格式转换 1、数据初认识 2、将区域分割成多个点 3、数据转换 4、数据转换调用 二、WebGIS展示空间位置信息 1、定义底图 2、Polygon的可视化 3、实际效果 三、总结 前言 通常而言,海事部门如海事局,通常会在所述的管辖区域内…...
用Ollama 和 Open WebUI本地部署Llama 3.1 8B
说明: 本人运行环境windows11 N卡6G显存。部署Llama3.1 8B 简介 Ollama是一个开源的大型语言模型服务工具,它允许用户在自己的硬件环境中轻松部署和使用大规模预训练模型。Ollama 的主要功能是在Docker容器内部署和管理大型语言模型(LLM&…...
计算机毕业设计选题推荐-学生作业管理系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
怎么提升网站的流量吗/友情链接站长平台
4月25日,天龙光电发布了2016年年报,公司全年营业总收入1.5亿元,同比上年的1.3亿元增长15.30%;净利润-6291.05万元,同比2015年-39468.66万元的巨亏有明显减少。 然而,经营情况虽然有所好转,可业绩的连续亏损…...
中小企业做网站推广/青岛谷歌优化公司
一、动态监听 oracle监听器是一个独立的进程,通常在数据库实例启动前先启动,当oracle实例在open时,会动态向监听器程序注册其service_names和instance_name。实例启动的时候,PMON进程会根据instance_name,service_name参数将实例和…...
义乌网红/seo营销外包公司
2019独角兽企业重金招聘Python工程师标准>>> tomcat 6的Connector配置如下: <Connector port"8080" protocol"HTTP/1.1"connectionTimeout"20000"redirectPort"8443"maxThreads"800" acceptCount"1000&q…...
wordpress 纪念爱情/网络营销策划公司
1. 在一个项目中有多个CPP文件,运行其中的一个? 方法1:选择不运行文件—右击—“属性”—“常规”—“从生成中排除”—“是”—>再运行即可。 2....
手机网站建设制作教程视频/友情链接查询
工具/原料电脑方法一方法/步骤1:首先介绍第一个恢复方法,先从桌面空白处右键,选择右键中的“属性”菜单。方法/步骤2:在显示属性窗口,选择“桌面”选项卡,然后在其界面中,找到“自定义桌面”这个按钮,打开它…...
wordpress注意/seo综合查询系统
8.5 网络请求uni.request(OBJECT) 发起网络请求。 在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。 OBJECT 参数说明 data 数据说明 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转…...