在实际产品运行中,对连接管理有了更新的认识,这里分享一下。
shared_ptr管理连接对象的生命周期
shared_ptr的引用计数器决定了连接对象的生命周期。这里我说的连接对象就是在我的前文:http://blog.csdn.net/csfreebird/article/details/8522620
中的Client对象:
#include "core/connection.h"
#include <vector>
using namespace std;
class Client: public Connection<Client> {
public:
Client(io_service& s);
销毁连接对象的条件
那么什么情况下shared_ptr的引用技术会变成0呢?必须满足下列所有条件:1. 如果你不再发起任何异步读/写操作
因为每一次异步读/写操作都会将Client对象自己的this指针包装成shared_ptr,通过bind交给boost asio框架,此时框架将持有该shared_ptr,直到读/写完成,回调我们自己的函数后才会将引用计数器减1。
2. 如果没有任何其他对象或者容器持有这个shared_ptr。
实际通信程序为了实现服务器事件通知,我会将所有的Client对象的shared_ptr保存在一个容器中,比如map。然后定期的检查这些Client有没有在数据库中有事