前几日下午,突然收到很多超时的反馈,查了下开发者反馈的一些请求,基本都是在毫秒级处理完成的,但是开发者反馈是超时很严重的,于是首先怀疑网络问题,但是反馈的开发者上面ping到服务器的延迟都非常小,稳定且没有丢包。
async.c是uwsgi提供的异步io的模块,相关的文档 uwsgi async doc虽然花了不少时间看,但是涉及的细节过多,所以也只是简单过了下整个流程,注释了一些自己的见解
greenlet之类的框架也只是粗略过了下,所以关于和协程交互的那块就还没有详细的注释
网络请求中,定时器一般用于超时操作的处理,由于各种定时器的实现思路都非常类似 所以由SelectConnection的代码为例子讲下定时器的实现思路。SelectConnection是pika 异步的长连接实现,适配了select, epoll, kqueue or poll等接口,由于原理都差不多,以下选择epoll的实现来讲
内部模块的交互都是使用protobuf,所有有部分数据是存protobuf的bytes到couchbase里面,但是某天发现从coucbase里面取protobuf的binary数据后客户端解析失败: