2025年(6)
发布时间:2025-04-20 19:38:40
#### 执行器rust 中有很多异步执行环境。但是异步执行环境有一个问题。它有“传染性”,如果一个函数是异步的,那么它的所有调用者都必须是异步的。在前面的流量处理模型并不是异步的。所以为了不至于把协议解析部分的异步影响到流量处理模型,我们需要一个自己的执行器。这个执行器把异步操作封装起来,然后在流量处理模.........【阅读全文】
发布时间:2025-04-18 14:53:03
回顾一下前面的解析状态机。它在每一个流表模块提供的flow_t node也就是链接上执行,当执行不下去的时候就跳出来,出让执行权限给其他的链接。看起来像是为每一个链接都实现了一个微型的执行体,使得在同一个执行路径中,让流量处理程序可以并发处理大量的链接。这其实和async/await的异步模式很像。一个async函数就.........【阅读全文】
发布时间:2025-04-18 14:52:29
首先确定都需要划分哪些状态,比如SMTP可以分成下面几个状态:每个状态都是一个函数,这些函数放在一个函数数组中。函数内部在解析的同时判断是否需要切换状态:smtp_sm这个数组就是我们需要的状态机。smtp_sm[MAILFROM].fun这个函数就是处理mailfrom命令的函数。这个函数和 smtp_sm[MAILFROM].state对应。其他的.........【阅读全文】
发布时间:2025-04-18 14:50:59
在数据包基础上开始协议解析不是不可以,甚至有时候还更简单。比如我们想解析SMTP的maifrom命令,它几乎在所有邮件通信过程中都完整地在一个单独的包中。甚至字符数量更多的邮件头也是如此。但是却不能作出它们一定就完整地在一个包中的假设,因为TCP协议并没有这种要求。虽然在绝大多数邮件服务器的实现中都会表现如上面.........【阅读全文】