轮子proxy rust

09_rust的切片

rust的切片 rust另一种不持有所有权的数据类型:切片(slice) 从一个例子开始:实现一个函数,输入一字符串,返回该字符串第一个单词,如果没空格,则返回整个字符串。 第一种实现,先返回找到的第一个空格的位置 fn main() { let s = String::from("hello wo ......
rust 09

造轮子之集成GraphQL

先简单对比以下GraphQL和WebAPI:GraphQL和Web API(如RESTful API)是用于构建和提供Web服务的不同技术。 数据获取方式: Web API:通常使用RESTful API,客户端通过发送HTTP请求(如GET、POST、PUT、DELETE)来获取特定的数据。每个请 ......
轮子 GraphQL

Kube-proxy代理方案

IPVS 是专门为LB设计的。它用hash table管理service,对service的增删查找都是O(1)的时间复杂度。不过IPVS内核模块没有SNAT功能,因此借用了iptables的SNAT功能。IPVS针对报文做DNAT后,将连接信息保存在nf_conntrack中,iptables据此 ......
Kube-proxy 方案 proxy Kube

造轮子之种子数据

在前面我们基本把应用框架的基础设施搭建完成。接下来我们就得着手处理一下种子数据的问题。在一个基础框架里面,种子数据很重要,比如一些基础数据,初始用户等等,这些都需要初始化,否则程序启动却无法使用就很尴尬了。 IDataSeeder 首先定义一个种子数据接口 using Wheel.Dependenc ......
轮子 种子 数据

rust防锁屏

use rsautogui::mouse; use std::thread::sleep; use std::time::Duration; fn main() { let timeseconds = Duration::from_secs(5); let mut x: u16; let y: u1 ......
rust

rust: function

///file: nestd.rs ///ide: RustRover 233.8264.22 /// /// /// /** *自定义函数 */ pub fn function() { println!("called `my::nested::function()`"); } #[allow(d ......
function rust

07_rust的引用和借用

rust的引用和借用 fn main() { let s1 = String::from("hello"); let len = test_func(&s1); println!("{} {}", s1, len); } fn test_func(s: &String) -> usize { s.l ......
rust 07

Rust 编译期嵌入指定目录下的所有文件

原理 通过宏实现,代码来自 macro-log: use proc_macro::TokenStream; use quote::quote; use syn::LitStr; pub fn read_dir(args: TokenStream) -> TokenStream { let path ......
文件 目录 Rust

07_rust的所有权

所有权 所有权是rust最独特、核心的特性,使得rust无GC也可保证内存安全。 其他语言都有在运行时管理自身内存的机制,比如GC,或者程序员手动申请和释放。 rust则采用了第三种方式:所有权 内存通过一所有权系统来管理,含一组编译时用于检测的规则。 当程序运行时,所有权不会影响程序速度。 sta ......
所有权 rust 07

造轮子之消息实时推送

前面我们的EventBus已经弄好了,那么接下来通过EventBus来实现我们的消息推送就是自然而然的事情了。说到消息推送,很多人肯定会想到Websocket,既然我们使用Asp.net core,那么SignalR肯定是我们的首选。接下来就用SignalR来实现我们的消息实时推送。 Notific ......
轮子 实时 消息

06_rust的控制流表达式

控制流表达式 if表达式 if表达式用于根据条件执行不同代码分支,条件必须是bool类型。 if表达式中,与条件关联的代码块叫分支(arm)。 可选择是否加上else表达式。 fn main() { let num = 3; if num < 6 { println!("arm num < 6"); ......
表达式 rust 06

05_rust的函数、注释

rust的函数 声明函数使用fn关键字,针对函数和变量名,rust使用snake case命名规范,即所有字母小写,单词间用下划线分开。 fn main() { test_function(); } fn test_function() { println!("test func"); } rust ......
注释 函数 rust 05

造轮子之EventBus

前面基础管理的功能基本开发完了,接下来我们来优化一下开发功能,来添加EventBus功能。EventBus也是我们使用场景非常广的东西。这里我会实现一个本地的EventBus以及分布式的EventBus。分别使用MediatR和Cap来实现。 现在简单介绍一下这两者:MediatR是一个轻量级的中介 ......
轮子 EventBus

造轮子之属性注入配合懒加载构建服务抽象基类

在前面实现管理API的时候,可以看到我们用的挺多功能是没有通过构造函数注入的。比如缓存DistributedCache,MemoryCache,对象映射Mapper,多语言L,当前用户CurrentUser等等。这些全都初始化在WheelServiceBase以及WheelControllerBas ......
轮子 属性

造轮子之菜单管理

前面完成了基础管理的相关API,接下来就得做一个菜单管理了,用于对接管理后台前端界面。 设计菜单结构 菜单是一个多级结构,所以我们得设计一个树形的。包含自己上级和下级的属性。同时预留Permission用于做可选的权限限制。 namespace Wheel.Domain.Menus { /// <s ......
轮子 菜单

造轮子之角色管理

在asp.net core identity中已经有RoleManager,我们只需要封装一下API操作Role即可完成我们角色管理相关功能,这里API打算只提供分页查询,创建以及删除,不提供修改API。 实现RoleManageAppService IRoleManageAppService na ......
轮子 角色

造轮子之用户管理

跟角色管理一样,asp.net core identity中已经包含了UserManager,我们只需要简单包装一下逻辑即可完成我们的用户管理相关功能。 这里只打算添加分页查询,创建以及修改用户的API,不提供删除API。 实现UserManageAppService IUserManageAppS ......
轮子 用户

Rust命令行解析程序:Clap

Rust命令行解析程序:Clap 基于Clap 4.4.6 参考资料:Clap官方手册 Chapter 1 配置解析器 使用Command结构体的new方法构建解析器: // arg.exe use clap::{arg, Command}; fn main() { // 只要调用clap解析命令行 ......
命令 程序 Rust Clap

11. 用Rust手把手编写一个wmproxy(代理,内网穿透等), 实现健康检查

健康检查维持着系统的稳定运行, 极大的加速着服务的响应时间, 并保证服务器不会把消息包转发到不能响应的服务器上, 从而使系统快速稳定的运转 ......
wmproxy Rust 11

04_rust的数据类型

数据类型 有 标量和复合类型 rust是静态编译语言,需在编译时知道所有变量的类型。 1)通常基于变量上下文使用的值,编译器能推断出具体类型。 2)若可能的类型存在多种,则需手动标注,如下例子。 let d: u32 = "56".parse().expect("not a num"); // 因为 ......
类型 数据 rust 04

微软开源 windows-drivers-rs,用 Rust 开发 Windows 驱动程序

Microsoft Azure 首席技术官兼著名 Windows 软件开发人员 Mark Russinovich 在社交平台上宣布,启动了一个名为 windows-drivers-rs 的新开源项目。 该项目可帮助开发人员使用 Rust 开发 Windows 驱动程序,旨在支持 WDM (Windo ......

Rust Clap库学习

Clap学习 本片内容主要参考clap的官方文档 在使用Rust的库之前, 首先需要添加clap库: cargo add clap --features derive 其他派生clap::_features - Rust (docs.rs) 运行这个命令行会在Cargo.toml中添加 clap = ......
Rust Clap

rust HashMap 排序

按照key和value升序、降序、自定义排序示例 use std::collections::HashMap; use std::cmp::Ordering; fn main() { let mut df = HashMap::new(); for x in 5..=12 { let k = for ......
HashMap rust

造轮子之多语言管理

多语言也是我们经常能用到的东西,asp.net core中默认支持了多语言,可以使用.resx资源文件来管理多语言配置。但是在修改资源文件后,我们的应用服务无法及时更新,属实麻烦一些。我们可以通过扩展IStringLocalizer,实现我们想要的多语言配置方式,比如Json配置,PO 文件配置,E ......
轮子

【RcoketMQ】RcoketMQ 5.0新特性(一)- Proxy

为了向云原生演进,提高资源利用和弹性能力,RcoketMQ在5.0进行了架构的调整与升级,先来看新特性之一,增加了Proxy层。 增加Proxy代理层 计算存储分离 计算存储分离是一种分层架构,将计算层与存储层分开。 计算层指的是一些消耗计算资源的功能模块比如协议解析、消费管理等,存储指的是数据存储 ......
RcoketMQ 特性 Proxy 5.0

typescript: Proxy Pattern

/** * Proxy Pattern 代理是一种结构型设计模式, 让你能提供真实服务对象的替代品给客户端使用。 代理接收客户端的请求并进行一些处理 (访问控制和缓存等), 然后再将请求传递给服务对象。 * The Subject interface declares common operatio ......
typescript Pattern Proxy

造轮子之权限管理

上文已经完成了自定义授权策略,那么接下来就得完善我们的权限管理了。不然没有数据,如何鉴权~ 表设计 创建我们的表实体类: namespace Wheel.Domain.Permissions { public class PermissionGrant : Entity<Guid> { public ......
轮子 权限

02_rust配置国内源

配置rust的国内源: linux下: vim ~/.cargo/config windows:c盘/用户/用户名/.cargo/config 如果没有config文件,创建一个即可。 增加源链接,在[source.crates-io]下增加replace-with = 'xxx' [source. ......
rust 02

Rust cargo常用命令

目录设置国内镜像创建新项目构建项目运行项目检查项目,但不构建可执行文件运行项目的测试发布项目更新依赖查看项目依赖关系树创建新的库项目文档生成 设置国内镜像 cd ~/.cargo # 创建config文件 vim config # 添加如下镜像源 [source.crates-io] registr ......
命令 常用 cargo Rust

Rust安装及学习资料

目录官网包管理Rust 程序设计语言通过例子学 Rust在线运行安装rustup升级Rust卸载Rust创建项目 官网 https://www.rust-lang.org/zh-CN/ 包管理 https://crates.io/ Rust 程序设计语言 https://kaisery.github ......
学习资料 资料 Rust