baidu / sofa-pbrpc

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

增加Server Timeout支持,以避免不必要的response造成带宽占用 #83

Closed qinzuoyan closed 8 years ago

qinzuoyan commented 8 years ago

问题描述

当RequestTimeout之后,实际上对应Socket没有关闭,超时后数据还是会被接收,这在传输大数据块时,会占用较大带宽。

原因分析

这个问题存在的原因在于:

考虑如下:

参见pull request #84 但是还有改进的地方:

bluebore commented 8 years ago

这个issue解决了不必要的response,是否能再加个功能,避免不必要的request,即: 用户的service可能是同步实现,因为过载而导致堵塞。server端收到request后,要排队调用用户的service,在真正调用用户service前,请求可能已经超时,这时候继续调用用户的service,产生response,再丢弃,其实也是很浪费的。

yuandong1222 commented 8 years ago

GREAT WORK!

qinzuoyan commented 8 years ago

@bluebore ,我明白你的意思,我要说几点:

... ...
        // process messages
        while (!is_closed() && !received_messages.empty())
        {
            on_received(received_messages.front());
            received_messages.pop_front();
        }
... ...
liangjianqun commented 8 years ago

赞这个主题! 可以考虑把用户最初掉用rpc的start_time和time_out附带上,在真正发送rpc时判断一下超时; 对端收到请求时记录一下receive_time,处理过程中或者response时都可判断一下是否已经超时

qinzuoyan commented 8 years ago

参见#86 ,目前已经考虑了server_wait_time,现在就差client_wait_time需要考虑了