Closed qinzuoyan closed 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不能被关闭。
问题描述:目前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不能被关闭。