baidu / sofa-pbrpc

A light-weight RPC implement of google protobuf RPC framework.
Other
2.13k stars 655 forks source link

修复keep_alive_time误杀问题 #60

Closed qinzuoyan closed 8 years ago

qinzuoyan commented 8 years ago

问题描述:目前keep_alive_time功能实现依赖于stream的最后读写操作时间(last_rw_time),如果now - last_rw_time > keep_alive_time,则认为连接的空闲时间超过阈值,就会主动关闭stream。但是这样可能_产生误杀_:如果一个连接上正在处理一个请求,而这个请求的处理时间很长(大于keep_alive_time),并且在等待处理完成的这段时间中stream上没有发生读写,则stream也会被提前关闭,造成请求处理完成后无法response,这是不合理的。

解决办法:对RpcClientStream和RpcServerStream各自维护pending_process_count值,如果pending_process_count > 0,则stream不能被关闭。