【小沐学Web】Rust实现Web服务器

news2024/11/28 0:41:26

在这里插入图片描述

文章目录

  • 1、简介
  • 2、开发环境配置
    • 2.1 下载
    • 2.2 安装
    • 2.3 编辑工具
    • 2.4 构建工具
    • 2.5 自动化工具
  • 3、Hello World
  • 4、TCP/UDP通信
  • 5、Web服务器
  • 结语

1、简介

https://www.rust-lang.org/

Rust: 一种使每个人都能够构建可靠且高效的软件的语言。
如今,全球有数百家公司在生产环境中使用 Rust,以提供快速、资源少、跨平台的解决方案。您熟悉和喜爱的软件,例如Firefox、 Dropbox和Cloudflare,都使用 Rust。从初创公司到大公司,从嵌入式设备到可扩展的 Web 服务,Rust 都非常适合。

  • 高性能
    Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

  • 可靠性
    Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全——使您能够在编译时消除许多类别的错误。

  • 生产率
    Rust 有很棒的文档、一个带有有用错误消息的友好编译器和一流的工具——一个集成的包管理器和构建工具、具有自动完成和类型检查的智能多编辑器支持、一个自动格式化程序等等。

在这里插入图片描述

2、开发环境配置

2.1 下载

https://www.rust-lang.org/tools/install
下载安装程序 rustup-init.exe,直接运行即可完成安装。
在这里插入图片描述

2.2 安装

运行 rustup-init.exe,如下下图所示:
在这里插入图片描述

2.3 编辑工具

Rust 支持很多的集成开发环境(IDE)或开发专用的文本编辑器。
无论您喜欢用命令行还是可视化编辑器,都有适合的 Rust 集成供您选择。 您也可以使用 Rust DO_NOT_SUBMIT来为自己的编辑器添加 Rust 支持。
在这里插入图片描述

2.4 构建工具

Cargo 是 Rust 的构建工具,它将常用命令集于一身,无需引入其它命令。

  • (1)安装
    crates.io 上拥有成千上万的软件包,您想要的解决方案在这里几乎都能找到。 站在巨人的肩膀上,您的团队可远离重复,专注创新。
  • (2)测试
    Rust 出色的测试工具能让您对代码放心。cargo test 是 Rust 统一的测试方案。测试代码既可写在功能代码之后,也可放在独立文件中,它满足您所有的测试需求。
  • (3)部署
    cargo build 可为不同平台构建精益的可执行文件。仅需一行命令,您的代码就能针对 Windows、Linux、macOS 和 Web 进行编译。支持全部现代平台接口,无需定制构建文件。

2.5 自动化工具

利用自动化加速开发

  • (1)Rustfmt
    Rustfmt 用于自动格式化 Rust 代码,使代码更加容易阅读、编写和维护。最重要的一点是:您再也不必为空格或大括号位置而争论了。
  • (2)Clippy
    “您似乎正在编写一个迭代器。”
    Clippy 能够帮助所有不同经验水平的开发者编写出符合惯例的代码及推行标准写法。
  • (3)Cargo Doc
    Cargo 文档构建器让所有 API 都有文档。 您可以通过 cargo doc 在本地生成文档, 还可以通过 docs.rs 在线获取公开的 crate 文档。

3、Hello World

fn main() {
    println!("Hello World!");
}

4、TCP/UDP通信

5、Web服务器

  • Cargo.toml
[package]
name = "testweb"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
iron = "0.5.1"
mime = "0.2.3"
router = "0.5.1"
urlencoded = "0.5.0"

  • main.rs
extern crate iron;
#[macro_use] extern crate mime;

use iron::prelude::*;
use iron::status;
//use iron::Response;

fn main() {
    println!("Serving on http://0.0.0.0:8080...");
    Iron::new(get_form).http("0.0.0.0:8080").unwrap();
}

fn get_form(_request: &mut Request) -> IronResult<Response> {
    let mut response = Response::new();

    response.set_mut(status::Ok);
    response.set_mut(mime!(Text/Html; Charset=Utf8));
    response.set_mut(r#"
<html>
	<body>
		Hello!
	</body>
</html>
        "#);

    Ok(response)
}

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谈谈Memcached与Redis

1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库&#xff0c;但是不支持数据的持久化&#xff0c;服务器关闭之后数 据全部丢失。Memcached使用C语言开发&am…

【01】水仙花数算法

水仙花数 是指一个n位数&#xff08;n ≥ 3&#xff09;&#xff0c;它的每个位上的数字的n次幂之和等于该数本身。换句话说&#xff0c;对于一个三位数而言&#xff0c;如果它满足条件&#xff1a;各个位上的数字的立方和等于该三位数本身&#xff0c;那么这个数就被称为水仙花…

chatgpt赋能python:Python操作——去除非字母元素优化SEO

Python操作——去除非字母元素优化SEO 介绍 在做SEO优化时&#xff0c;处理关键词是必不可少的环节。我们需要对关键词进行一些处理&#xff0c;使其更加规范、简洁、且易于搜索引擎的识别和分类。其中一个重要的环节&#xff0c;就是去除非字母元素&#xff0c;即去除关键词…

大模型训练和部署的关键技术

自2016年至今&#xff0c;模型大小每18个月增长40倍&#xff0c;自2019年到现在&#xff0c;更是每18个月增长340倍。 然而相比之下&#xff0c;硬件增长速度较慢&#xff0c;自2016年至今&#xff0c;GPU的性能增长每18个月1.7倍&#xff0c;模型大小和硬件增长的差距逐渐扩大…

LeetCode110. 平衡二叉树

题目 leetcode110. 平衡二叉树 思路 只有每个节点的左右子树高度差不超过1才是平衡二叉树&#xff0c;因此可以递归解决。 递归的2要素&#xff1a; ①终止条件&#xff1a;当左右子树高度差超过1时返回false&#xff1b;递归到空节点和叶子节点时&#xff0c;由于空节点和…

每日学术速递5.31

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Prompt-Free Diffusion: Taking "Text" out of Text-to-Image Diffusion Models 标题&#xff1a;无提示扩散&#xff1a;从文本到图像扩散模型中提取“文本” 作者&…

单片机GD32F303RCT6 (Macos环境)开发 (三十五)—— 数字加速度计 (ADXL345 ) 使能中断获取运动与静止状态

数字加速度计 &#xff08;ADXL345&#xff09;- 使能中断获取运动与静止状态 1、几个与运动、静止检测相关的寄存器 a、寄存器 0x24—THRESH_ACT(读/写) THRESH_ACT寄存器为8位寄存器&#xff0c;保存检测活动的阈 值。数据格式无符号&#xff0c;因此&#xff0c;活动事件…

从零开始 Spring Boot 35:Lombok

从零开始 Spring Boot 35&#xff1a;Lombok 图源&#xff1a;简书 (jianshu.com) Lombok是一个java项目&#xff0c;旨在帮助开发者减少一些“模板代码”。其具体方式是在Java代码生成字节码&#xff08;class文件&#xff09;时&#xff0c;根据你添加的相关Lombok注解或类来…

冈萨雷斯DIP第9章知识点

文章目录 9.1 预备知识9.2 腐蚀和膨胀9.3 开运算与闭运算9.5 一些基本的形态学算法9.8 灰度级形态学 9.1 预备知识 形态学运算是用 集合 来定义的 。 在图像处理中 使用两类像素集合的形态学&#xff1a;目标元素 和 结构元 SE 。 通常目标定义为前景像素集合&#xff0c;结构…

计算机基础--->操作系统(2)【线程和进程、死锁】

文章目录 线程和进程线程和进程的区别&#xff1f;有了进程为什么还需要线程&#xff1f;为什么使用多线程&#xff1f;线程间的同步方式进程控制块&#xff08;PCB&#xff09;进程有哪几种状态&#xff1f;进程间的通讯方式有哪些&#xff1f;进程常见的调度算法有哪些&#…

冈萨雷斯DIP第2章知识点

文章目录 2.1 视觉感知要素2.2 光和电磁波谱2.3 图像感知与获取2.4 图像取样和量化2.4.1 取样和量化的基本概念2.4.2 数字图像表示2.4.4 空间分辨率和灰度分辨率2.4.5 图像内插 (image interpolation)2.5 像素间的一些基本关系 2.6 数字图像处理所用的基本数学工具介绍2.6.3 算…

基础查询 — 投影、选择

准备 数据查询操作均采用的是MySQL。示例数据库采用的是northwind 示例数据库。数据库导入手册 关于northwind 示例数据库 查询数据库中的表 show tables;查询表的表属性 desc xxx(表名);投影操作 1.语法 投影运算&#xff1a;选择表中的全部或者部分列。 语法 select 字段…

Jeston Orin Nano 离线烧写系统到NVME存储

大家好&#xff0c;我是虎哥&#xff0c;Jeston Orin nano 8G模块&#xff0c;我自己也玩了一段时间&#xff0c;在Orin 系列&#xff0c;官方提供了一种新的烧写方式&#xff0c;也就是离线烧写&#xff0c;就是你在主机&#xff0c;挂载存储后&#xff0c;直接烧写系统到这个…

Maven高级——继承与聚合——聚合实现

为什么要聚合 分模块开发之后一个项目会被拆分成多个模块。多个模块之间还会有依赖关系。 在一些大型项目中模块比较多&#xff0c;模块之间的依赖关系也会变得错综复杂。 并且在打包的时候还会有一个新的问题&#xff0c;在打包的时候我们要打包的是Springboot项目&#xf…

黑马Redis视频教程高级篇(一)

目录 分布式缓存 一、Redis持久化 1.1、RDB持久化 1.1.1、执行时机 1.1.2、RDB原理 1.1.3、小结 1.2、OF持久化 1.2.1、AOF原理 1.2.2、OF配置 1.2.3、AOF文件重写 1.3、RDB与AOF对比 二、Redis主从 2.1、搭建主从架构 2.1.1、集群结构 2.1.2、准备实例和配置 …

CBCGPRibbonBar 设置整个界面字体大小

在CMainFrame.h中添加成员变量&#xff1a;CFont m_fontCustom; 在onCreat()方法结束之前的任一个位置写下下测方法即可 方法1&#xff1a; { // Create custom font: LOGFONT lf; globalData.fontRegular.GetLogFont(&lf); lf.lfItalic TRUE; …

详解Spring Cloud版本问题

目录 1.让人头疼的多版本号体系 2.目录关系 3.为什么会有多个版本号体系 1.让人头疼的多版本号体系 由于历史原因&#xff0c;spring cloud分为了Alibaba和Netflix两个体系。 想要了解原因以及整个spring cloud体系的来龙去脉的同学可以去看我的另一篇文章&#xff1a; S…

MySQL脏读、不可重复读、幻读的区别与注意事项

目录 一、引入二、事务并发执行会遇到的问题1. 区别2. 注意 三、隔离级别四、参考资料 一、引入 MySQL的架构是 C/S 架构&#xff08;即 客户端/服务器 架构&#xff09;&#xff0c;一个服务器可能有多个客户端与之相连接&#xff0c;每个连接称之为会话&#xff08;Session&…

chatgpt赋能python:Python去掉分隔符:优化SEO效果的一种方法

Python去掉分隔符&#xff1a;优化SEO效果的一种方法 在现代的数字化时代&#xff0c;SEO已经成为了许多企业、个人和网站运营者最为关心的问题之一。SEO指的是搜索引擎优化&#xff0c;通过各种技术手段和优化方式&#xff0c;提高网站在搜索引擎结果页面上显示的排名。Pytho…

PageHelper使用

PageHelper &#xff1a; mybatis中的分页插件 文档 &#xff1a; https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md springboot使用PageHelper <dependency><groupId>com.github.pagehelper</groupId><artifactId…