Qihoo360 / evpp

A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols.
BSD 3-Clause "New" or "Revised" License
3.59k stars 943 forks source link

服务端代码支持connection keepalive #82

Open inter169 opened 7 years ago

inter169 commented 7 years ago

hi, evpp TCPServer类目前不支持连接的保活(目前有socket SO_KEEPALIVE选项),有计划在TCPServer内部支持保活功能,比如: 主线程accept到新连接然后dispatch到worker thread的ev_base之后, worker thread内部维持连接队列、堆等有序结构,便于定时器做过期连接剔除?

或对于这个需求实现有什么建议吗?

shgxwxl commented 7 years ago

SO_KEEPALIVE 选项对于TCP协议来说已足够使用 如果是linux平台,建议深入看下如下几个内核参数 net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_probes net.ipv4.tcp_keepalive_intvl

如果有更进一步的需求,建议基于TCPClient/Server 甚至TCPconn封装自己的应用层协议 应用层检测报文的交互,做连接过期的逻辑处理

inter169 commented 7 years ago

ok 了解了 thanks

zieckey commented 6 years ago

tcp长连接保活的确应该在应用层处理。evpp作为一个库,不知道上层的tcp协议具体是什么样子;例如http、thrift都是基于tcp的协议,他们的保活措施肯定不一样