自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(36)
  • 资源 (17)
  • 收藏
  • 关注

原创 25从零开始用Rust编写nginx,序列化之serde是如何工作的

序列化不管在配置还是在传输等过程中,都是必不可少的存在,了解序列化及反序列化的过程我们将可以更快的找到切入点去实现自己的功能。点击[关注][在看]是对作者最大的支持。

2024-01-29 09:52:11 1174

原创 24从零开始用Rust编写nginx,细说HTTP行为中的几种定时器

相关的超时数据均存放在该类里,接下来类型进行相应的处理/// keep alive 超时时长时间的尺度越小,那么对时间的敏感度越高,定时器是约束,也是保护,保护不受攻击。点击[关注][在看]是对作者最大的支持。

2024-01-29 09:51:12 973

原创 23. 从零用Rust编写正反向代理,流控小姐姐的温柔一刀!

wmproxy已用Rust实现http/https代理,socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子。

2024-01-17 16:22:45 879

原创 22. 从零用Rust编写正反向代理,一个数据包的神奇HTTP历险记!

这是数据的一趟历险记,也是互联网上每天都在发生的,他快速稳定的传播,给我们构建了一个美好的世界。点击[关注][在看]是对作者最大的支持。

2024-01-17 16:22:07 388

原创 21. 从零用Rust编写正反向代理,tokio竟然这样对待socket!

wmproxy已用Rust实现http/https代理,socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子。

2024-01-16 09:10:06 1036

原创 20. 从零用Rust编写正反向代理,四层反向代理stream(tcp与udp)实现

至此四层的反向代理TCP/UDP均已完成,也符合预期。点击[关注][在看]是对作者最大的支持。

2024-01-16 09:07:50 1030

原创 19. 从零用Rust编写正反向代理, 配置数据的热更新原理及实现

此时以不同于nginx的另一种配置的加载已经开发完毕,配置的热加载可以让您更从容的保护好您的系统。点击[关注][在看]是对作者最大的支持。

2024-01-11 15:56:54 1213

原创 18. 从零用Rust编写正反向代理, 主动式健康检查源码实现

主动检查可以及时的更早的发现系统中不稳定的因素,是系统稳定性的基石,也可以通过更早的发现因素来通知运维介入,我们的目的是使系统更稳定,更健壮,处理延时更少。点击[关注][在看]是对作者最大的支持。

2024-01-11 15:52:53 513

原创 17. 从零用Rust编写正反向代理, Rust中一些功能的实现

以上是三种编写Rust中常碰见的情况,也是在此项目中应用解决过的方案,在了解原理的情况下,解决问题可以有不同的思路。理解了原理,你就知道他设计的初衷,更好的帮助你学习相关的Rust知识。env_logger。

2024-01-09 17:38:19 1042

原创 16. 从零用Rust编写正反向代理, 反向代理upstream源码实现

此时关于反向代理的几个初步问题已经处理完成反向代理操作。反向代理在互联网已经组成了密不可分的组成部分,成为了互联网的基石之一。像云服务器的负载均衡,K8S中的数据同步等大的小的均用到了这一项技术。

2024-01-09 11:40:51 622

原创 15. 从零用Rust编写正反向代理, 如果将nginx.conf转成yaml,toml,json会怎么样

在不考虑自建格式的情况下,如nginx的nginx.conf,如caddy的Caddyfile,将会同时兼容toml及yaml格式的配置文件。

2024-01-02 10:00:42 639

原创 14. 从零用Rust编写正反向代理, HTTP文件服务器的实现过程及参数

如此静态文件服务器则已初步实现,文件服务中的压缩及流式传输已基本完成。

2023-12-20 14:10:37 1224

原创 13. 从零用Rust编写正反向代理, HTTP中的压缩gzip,deflate,brotli算法

压缩为了可以更好的存储,也可以更好的传输,是我们日常生活中必不可少的存在,虽然现在比以前带宽更高,存储比之前的更便宜,但是现在的数据更多,传输延时要求更少,所以高压缩的能力依然非常受欢迎。

2023-12-18 17:51:22 1251

原创 12. 从零用Rust编写正反向代理, TLS的双向认证信息及token验证

TLS双向认证是指客户端和服务器端都需要验证对方的身份,也称mTLS。在建立Https连接的过程中,握手的流程比单向认证多了几步。单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。双向通信流程,客户端除了需要从服务器端下载服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证通过了,才开始建立安全通信通道进行数据传输。TLS是安全套接层(SSL)的继任者,叫传输层安全(transport layer security)。

2023-12-16 10:11:26 1132 1

原创 11. 从零用Rust编写正反向代理, 实现TCP连接的健康检查

wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来, 感兴趣的可以一起造个轮子法。

2023-12-13 17:15:19 1084 1

原创 10. 从零用Rust编写正反向代理, HTTP内网穿透支持修改头信息

header的修改分为两部分,一部分是对请求Request的重写,另一部分是对返回Response的重写。所以我们必须同时支持这两种,且将其区分出来。每条header信息我们将定定义一个可变长的数组,如第一个字符为proxy则表示对Request修改。关于修改的动作有添加,如需要末尾添加,我们用操作符,比如删除,我们用操作符,如设置,设置我们默认不做任何参数,直接以header_name开头,如默认值,有些值有了参数我们就不将其重写,如果没有我们则设为默认值,我们用操作符?,如# 连接服务端地址。

2023-12-11 16:29:53 1198

原创 9. 从零用Rust编写正反向代理, HTTP2改造篇之HPACK示例, 了解http2头信息如何处理

HPACK管理着HTTP2的头部的协议部分,有着高压缩比和重复请求的高复用性,双方编码解码需要各自维持一份动态表,动态根据处理数据来动态拓展,保证双方维持的表一模一样。从而保证ID索引不会乱。Huffman编码把头里面需要用到字符串的数据进行进一步的压缩,相对来说整个过程复杂度比HTTP1高很多,但相对的对使用者完全透明,在不影响其使用的情况下提高传输效率,并减少带宽的使用量。

2023-12-08 17:36:30 1186 1

原创 8. 从零用Rust编写正反向代理, HTTP改造篇之HPACK原理

HTTP/1.1发表于1999年,该协议持续被使用到了至今HTTP/2标准于2015年5月以RFC7540正式发表。由于HTTP2对1.1协议保持有高度的兼容,并且主要以字节传输,相比于1.1有更好的传输效率和更强大的传输能力,所以他快速流行起来在2017年5月,全球排名前1000万的网站中,有13.7%支持了HTTP/2。在2019年6月,全球有36.5%的网站支持了HTTP/2。

2023-12-07 13:54:39 1065 1

原创 7. 从零用Rust编写正反向代理, HTTP及TCP内网穿透原理及运行篇

wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来, 感兴趣的可以一起造个轮子法。

2023-12-06 18:37:22 1484 3

原创 6. 从零用Rust编写正反向代理, 通讯协议源码解读篇

下面是代码类的定义/// 中心客户端/// 负责与服务端建立连接,断开后自动再重连/// tls的客户端连接信息/// tls的客户端连接域名/// 连接中心服务器的地址/// 内网映射的相关消息/// 存在普通连接和加密连接,此处不为None则表示普通连接/// 存在普通连接和加密连接,此处不为None则表示加密连接/// 绑定的下一个sock_map映射/// 发送Create,并将绑定的Sender发到做绑定。

2023-12-05 09:53:33 1371 3

原创 5. 用Rust手把手编写一个Proxy(代理), 通讯协议建立, 为内网穿透做准备

在tcp的流传输过程中,可以看做是一堆的字节的集合体,是一种“流”式协议,就像河里的水,中间没有边界。或者好比不懂汉语的来看古文,因为古文里没有任何的句读,不知何时另起一行。那我们如何正确的做到拆包解包,保证数据格式的正确呢?以下是客户端发送两个30字节的包(P1及P2),服务端读取数据可能读出来的可能gantttitle 粘包的可能,例每个包30字节section 示例1section 示例2section 示例3P2部分 :a3, 1, 20P2部分P1全部 :after a3, 60。

2023-09-28 11:40:58 144 1

原创 用Rust手把手编写一个Proxy(代理), TLS加密通讯

因为RSA用到了指数级的计算,位数又是至少1024位起的,所以计算量非常的庞大,所以RSA的算法效率并不高,所以TLS除一开始密文交换的时候用到RSA,后续均用得到的密文做对称加密以减少计算量,TLS1.3所用如下。现在每个请求都和代理服务端进行一次请求握手,当开启断开非常多的时候会比较耗性能,可以考虑共用一条socket然后内部做协议解析,会减少握手时间,只是在流量非常大的时候会出现某条请求耗光了所有的带宽。,我们的处理函数不确定传入的是哪种类型,所以此前的入参TcpStream全部改成泛型T,类似。

2023-09-25 11:29:43 93 1

原创 用Rust手把手编写一个Proxy(代理), UDP绑定篇

用Rust手把手编写一个Proxy(代理), UDP绑定篇, UDP实现原理, 及协议解析

2023-09-21 09:58:07 144 1

原创 用Rust手把手编写一个Proxy(代理), 动工

wmproxy, 代理, 支持http/https/socks5等协议

2023-09-19 09:59:40 213 1

原创 用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子

wmproxy 将实现http/https代理, socks5代理, 后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 希望感兴趣的可以一起参与参与。

2023-09-16 21:04:12 163 2

原创 如何在云服务上快速拥有洛甲WAF(Web防火墙)

洛甲WAF是基于openresty的web防火墙,通过配合后台保护您的数据安全,详情参考。

2023-02-16 16:39:42 298 1

原创 数独解法-变形数独(第三讲:数独进阶方法(摒除))

数独进阶方法(宫摒除(Hidden Single in Block),行摒除(Hidden Single in Block),列摒除(Hidden Single in Block))

2022-08-16 19:17:29 2748

原创 数独解法-变形数独(第二讲:数独基础方法(行唯一列唯一宫唯一唯余数))

数独基础方法(行唯一列唯一宫唯一唯余数)

2022-08-15 19:28:11 5483

原创 数独解法-变形数独(第一讲:介绍)

什么是数独?数独是一种益智游戏,最常见的有9宫格,也有五宫和七宫的异形,及四宫和六宫的正形,这里几宫代表N,在空格里填入数字1到N,使得每一行、每一列和每一个用粗线围起来的N个单元格里,填数都包含1到N各一个。换句话说,没有重复的数字出现。比如下面这个答案所给出的样子:可以从图上看出,每一行、列和粗线围起来的区域(称为宫,Block),都有N个单元格,并且每一组这样的N个单元格都不含有相同的数字,都是1到N各有一个,不多也不少。这便是数独的规则。.........

2022-08-15 17:03:15 2409

原创 tunm二进制协议在python上的实现

tunm是一种对标JSON的二进制协议, 支持JSON的所有类型的动态组合基本支持的类型 “u8”, “i8”, “u16”, “i16”, “u32”, “i32”, “u64”, “i64”, “varint”, “float”, “string”, “raw”, “array”, “map”下图是文本格式JSON与tunm的对比| 类型| 可读 | 可编辑 | 编码速度 | 解码速度 | 数据大小 | 预定义 || :— | :----: | :----: | :--

2022-06-27 10:49:46 85

原创 tunm二进制协议在python上的实现

# tunm二进制协议在python上的实现tunm是一种对标JSON的二进制协议, 支持JSON的所有类型的动态组合## 支持的数据类型基本支持的类型 "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "varint", "float", "string", "raw", "array", "map"## 为什么我们需要二进制协议下图是文本格式JSON与tunm的对比| 类型| 可读 | 可编辑 | 编码速度 |

2022-06-25 14:53:38 712 1

原创 tunm, 一种对标JSON的二进制数据协议

tunm, 一种对标JSON的二进制数据协议

2022-05-17 11:03:32 457 1

原创 还在担心CC攻击? 让我们来了解它, 并尽可能将其拒之服务之外

洛甲WAF是基于openresty的web防火墙,它由多个或者单个节点服务器和中控服务器组成, 它将节点的数据请求汇总到中控服务器做统一的分析, 从而可以自动的识别出哪些用户是非法IP, 从而实行自动封禁, 基本上能保证90%以上的CC攻击自动拦截, 保证服务器的有效正常的运转.

2022-03-23 11:34:18 976 1

原创 UE4打包问题处理

UE4常见错误整理打包问题打包问题当开始要尝试打安卓包的时候可能会发生以下问题AndroidPlatformFactory.RegisterBuildPlatforms: UnrealBuildTool.AndroidPlatformSDK using manually installed SDK -23IOSPlatformFactory.RegisterBuildPlatforms: UnrealBuildTool.IOSPlatformSDK has no valid SDKLinuxPla

2021-10-09 14:40:49 2695

原创 UE4使用UMG展示3D物品(C++代码实现)

本文展示如何在UE4中展示单个3D物体,并实现旋转放大本文所实现的主要流程如下分享关键信息小技巧创建UMG的展示界面动态创建展示的3D模型。禁止关卡层触发INPUT事件监听触控事件,实现旋转及放大事件退出,输入事件切换,删除3d模式,关闭界面本文所实现的主要流程如下创建展示的UMG界面动态创建展示的3d模型及旋置到正确的位置锁定输入事件,仅在UI层,防止触发关卡逻辑监听触控事件,实现旋转及放大事件退出,输入事件切换,删除3d模式,关闭界面分享关键信息小技巧在正文开始前分享个小技巧,有时候

2021-09-24 17:47:08 2234 3

原创 Nginx一键配置方法, 再也不用担心我的Nginx配置了

Nginx做为开发者的神器, 据2021年8月web服务器排行榜, nginx占据了30%的流量稳居第一, 相信大部分程序员都不会陌生.相信大部分的开发人员都经历过配置Nginx的过程, 每次配置都是要各种查查查的过程, 而且经常要配置个半天才能配置完成, 然后再进行测试. 推荐一个网站nginx在线配置,nginx快速配置 - 问蒙在线工具 (tool.fit)来进行快速配置.#Nginx配置说明Nginx配置以key空格value然后分号为结束符, 以#为注释符, 大括号{}里面的称为文件块如"

2021-09-12 18:58:08 2461 4

TD界面编译器

TD界面编译器 基于Qt开发,实现了游戏界面的基本元素,如文本,进度条,图片,按钮,复选框,输入框,页面布局,九宫图,容器 可实现界面的嵌套使用,导出格式为JSON格式,方便在各游戏中进行解析,并实现界面展现,后续可能进行开源

2014-11-29

cocos2d-x 通过socket实现http下载及断点续传的实现

cocos2d-x 通过socket实现http下载及断点续传的实现

2013-09-10

利用java反射调用实现对字符串的解析,成功调入函数,并且返回值

利用java反射调用实现对字符串的解析,成功调入函数,并且返回值

2013-05-06

lua 中的eclipse插件lua development tools,在原有的基础上实现工程函数跳转及提示

lua 中的eclipse插件lua development tools,在原有的基础上实现工程函数跳转及提示

2013-05-05

开发hibernate完整的必须的jar包,在您的开发之初帮助你

开发hibernate完整的必须的jar包,在您的开发之初帮助你

2013-03-01

jhighlight-1.0

JHighlight是一个可嵌入的Java语法高亮显示包支持Java,Groovy,C++,HTML,XHTML,XML,和LZX语言并支持导出成XHTML。这个包可用于许多个方面:可嵌入到其它工具比如

2013-02-02

hadoop-eclipse-plugin-1.1.1 插件

hadoop 中 eclipse 插件,希望能帮到你

2013-01-24

jdk1.6.0_35源码包

jdk1.6.0_35源码包,让您更清楚的知道java底层的工作原理

2013-01-23

cocos2d-x2.0 射击游戏实现 沈大海

cocos2d-x2.0 射击游戏实现 沈大海

2013-01-19

cJSON 一个c语言处理Json的代码

cJSON 一个c语言处理Json的代码

2013-01-19

使用wxWidgets进行跨平台程序开发

使用wxWidgets进行跨平台程序开发

2013-01-19

OpenGL文档,api大全,可直接查询函数

OpenGL文档,api大全,可直接查询函数,查询时请少掉默认的前缀gl

2013-01-19

pinyin4j-2.5.0 一个汉语转拼音的工作,java代码

pinyin4j-2.5.0 一个汉语转拼音的工作,java代码

2013-01-19

Spring 3.x企业应用开发实战.pdf

Spring 3.x企业应用开发实战.pdf

2013-01-19

C++封装的String类,用于Cocos2d-x开发等

一个C++ String类的封装,支持+号操作,类似java的字符串的使用用法。 支持直接拼接整型,char,string,便于应用开发

2013-01-19

Cocos2d-x 中文字符xml编辑器

一个用于Cocos2d-x的编辑器。用于解决中文乱码的问题,读取的时候用代码读取 static CCDictionary *strings = NULL; static CCDictionary *imagePaths = NULL; static std::string getStringByKey(std::string key) { if(strings == NULL) { std::string path = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("fonts/strings.xml"); strings = CCDictionary::createWithContentsOfFile(path.c_str()); strings->retain(); } return ((CCString*)strings->objectForKey(key))->m_sString; } static std::string getImagePathsByKey(std::string key) { if(imagePaths == NULL) { std::string path = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("image_path.xml"); imagePaths = CCDictionary::createWithContentsOfFile(path.c_str()); imagePaths->retain(); } return ((CCString*)imagePaths->objectForKey(key))->m_sString; }

2013-01-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除