evpp
evpp copied to clipboard
当服务器主动断开连接的时候,已连接的TCPClient资源和释放?
如题: 当服务器主动断开连接的时候,TCPClient OnConnection 函数中收到 Disconnecting的消息, 如果在这个事件之后调用Disconnect (在本次loop中调用,或QueueInLoop之后调用)函数的话,由于conn_已经断开连接了,不管这个时候conn_是否非空,在TCPClient::DisconnectInLoop中都会触发assert。如果不主动调用TCPClient::Disconnect的话,那么TCPClient 在析构的时候assert(!connector_.get()); 会触发。而connector_只能在TCPClient::DisconnectInLoop被重置为空。
所以问题是: 当服务器主动断开连接的时候,已连接的TCPClient资源和释放?
(TCPCLient的析构函数中的assert(!connector_.get()); 意味着必须调用TCPClient::Disconnect函数,而在服务器主动断开连接之后,客户端没法找到合适的时机去调用DisConnect函数,因为不管是在conn_ reset之前 还是 reset之后调用DisConnect都会在TCPClient::DisconnectInLoop中都会触发assert)
顶一下,我们现在也遇到了类似的问题,希望有人解答一下
顶一下,我们现在也遇到了类似的问题,希望有人解答一下
我说下自己的解决方案吧,我最后改了evpp源码, tcp_client.cc文件, 大概是这两处地方,我目前在我自己使用的范围内没fa发现这个改动有啥大问题,你可以试试,还有就是这个框架基本上都是各种异步,建议自己业务相关的代码 多 enable_shared_from_this.
我也去试试,谢谢!