草庐IT

rust-0.8

全部标签

Rust 实现的简单 http 转发

学习Rust时练手的小程序,功能类似代理,将网络请求转发到新的地址和端口。目前只有http请求的转发,未来希望能够代理各种常用的网络协议。代码地址:https://gitee.com/wangyubin/mario概要程序主要有2个参数:-L:监听的地址和端口-F:转发的地址和端口整体结构如下:程序启动之后,解析-L和-F参数,获取相应的的地址和端口,然后生成2个connection。-L参数对应的connection生成监听器(listener),-F参数对应的connection生成转发器(handler)。client不直接请求最终的服务器,而是请求listener监听的地址,liste

Rust 实现的简单 http 转发

学习Rust时练手的小程序,功能类似代理,将网络请求转发到新的地址和端口。目前只有http请求的转发,未来希望能够代理各种常用的网络协议。代码地址:https://gitee.com/wangyubin/mario概要程序主要有2个参数:-L:监听的地址和端口-F:转发的地址和端口整体结构如下:程序启动之后,解析-L和-F参数,获取相应的的地址和端口,然后生成2个connection。-L参数对应的connection生成监听器(listener),-F参数对应的connection生成转发器(handler)。client不直接请求最终的服务器,而是请求listener监听的地址,liste

文盘Rust -- 把程序作为守护进程启动

当我们写完一个服务端程序,需要上线部署的时候,或多或少都会和操作系统的守护进程打交道,毕竟谁也不希望shell关闭既停服。今天我们就来聊聊这个事儿。最早大家部署应用的通常操作是“nohupxxxx&”,别说像weblogic或者其他java容器有启动脚本,里面其实也差不多;很喜欢nginx的-d参数,或者像redis配置文件里可以指定是否以守护进程启动。看起来很优雅。那么,使用rust写一个服务端程序能不能优雅的使用一个参数指定应用daemon模式启动,同时使用stop方式优雅的停机呢?我们通过一个例子来说说基本的实现方式。实例代码依然集成在[interactcli-rs](https://g

文盘Rust -- 把程序作为守护进程启动

当我们写完一个服务端程序,需要上线部署的时候,或多或少都会和操作系统的守护进程打交道,毕竟谁也不希望shell关闭既停服。今天我们就来聊聊这个事儿。最早大家部署应用的通常操作是“nohupxxxx&”,别说像weblogic或者其他java容器有启动脚本,里面其实也差不多;很喜欢nginx的-d参数,或者像redis配置文件里可以指定是否以守护进程启动。看起来很优雅。那么,使用rust写一个服务端程序能不能优雅的使用一个参数指定应用daemon模式启动,同时使用stop方式优雅的停机呢?我们通过一个例子来说说基本的实现方式。实例代码依然集成在[interactcli-rs](https://g

Rust Aya 编写 eBPF 程序

本文地址:https://www.ebpf.top/post/ebpf_rust_aya1.前言Linux内核6.1版本中有一个非常引人注意的变化:引入了对Rust编程语言的支持。Rust是一种系统编程语言,Rust通过提供非常强大的编译时保证和对内存生命周期的明确控制。在内核开发中引入Rust语言,将会为内核开发的早期带来更多的安全保障。eBPF是在内核中基于事件运行用户自定义程序的技术,其验证器机制可以保障运行在内核中eBPF程序的安全性。Rust与eBPF有着一个共同的目标:保证内核安全,只是两者侧重的维度有所不同。尽管使用Rust编写eBPF程序多数情况下都需要通过不安全的方式在内核进

Rust Aya 编写 eBPF 程序

本文地址:https://www.ebpf.top/post/ebpf_rust_aya1.前言Linux内核6.1版本中有一个非常引人注意的变化:引入了对Rust编程语言的支持。Rust是一种系统编程语言,Rust通过提供非常强大的编译时保证和对内存生命周期的明确控制。在内核开发中引入Rust语言,将会为内核开发的早期带来更多的安全保障。eBPF是在内核中基于事件运行用户自定义程序的技术,其验证器机制可以保障运行在内核中eBPF程序的安全性。Rust与eBPF有着一个共同的目标:保证内核安全,只是两者侧重的维度有所不同。尽管使用Rust编写eBPF程序多数情况下都需要通过不安全的方式在内核进

Rust 如何实现 async/await

目录FutureWake&Context为什么需要executor?什么是waker?async/awaitExecutorWakerstruct到ArcWaketraitFuturesUnordered单线程executor线程池executor总结异步编程在Rust中的地位非常高,很多crate尤其是多IO操作的都使用了async/await.首先弄清楚异步编程的几个基本概念:FutureFuture代表一个可在未来某个时候获取返回值的task,为了获取这个task的执行状况,Future提供了一个函数用于判断该task是否执行返回。traitFuture{typeOutput;fnpol

Rust 如何实现 async/await

目录FutureWake&Context为什么需要executor?什么是waker?async/awaitExecutorWakerstruct到ArcWaketraitFuturesUnordered单线程executor线程池executor总结异步编程在Rust中的地位非常高,很多crate尤其是多IO操作的都使用了async/await.首先弄清楚异步编程的几个基本概念:FutureFuture代表一个可在未来某个时候获取返回值的task,为了获取这个task的执行状况,Future提供了一个函数用于判断该task是否执行返回。traitFuture{typeOutput;fnpol

Rust for Rustaceans: Idomatic Programming for Experienced Developers Chap.2 Types

翻译的内容如果有不理解的地方或者是其他的差错,欢迎后台回复讨论。类型在内存中的表示Rust中的每一个值都有自己的类型(Type)。在这一章中,我们将会看到Rust中的类型服务于许多不同的目的,但其中最基本的一个目的是告诉你如何翻译并理解内存中的比特。举例来说,比特串0b10111101(十六进制下为0xBD)本身并不能携带任何信息,只有当你赋予它一个特定的类型时它才有了含义:如果我们以u8为类型来翻译这一串比特,那么它代表着数字189;如果以i8为类型来翻译,那么它的含义变为了数字-67。当你定义自己的类型时,编译器将负责决定如何在内存中表示该类型的各个部分。你所定义的结构体(Struct)中

Rust for Rustaceans: Idomatic Programming for Experienced Developers Chap.2 Types

翻译的内容如果有不理解的地方或者是其他的差错,欢迎后台回复讨论。类型在内存中的表示Rust中的每一个值都有自己的类型(Type)。在这一章中,我们将会看到Rust中的类型服务于许多不同的目的,但其中最基本的一个目的是告诉你如何翻译并理解内存中的比特。举例来说,比特串0b10111101(十六进制下为0xBD)本身并不能携带任何信息,只有当你赋予它一个特定的类型时它才有了含义:如果我们以u8为类型来翻译这一串比特,那么它代表着数字189;如果以i8为类型来翻译,那么它的含义变为了数字-67。当你定义自己的类型时,编译器将负责决定如何在内存中表示该类型的各个部分。你所定义的结构体(Struct)中