基于socket连接池管理,长时间空闲会被防火墙切断,解决办法
1、心跳机制,保活
2、设置每个连接的最大空闲时间
Poco::Net::SocketAddress sa(_host, _port);
Poco::PoolableObjectFactory<Client, Client::Ptr> factory(sa);
Poco::ObjectPool<Client, Client::Ptr> pool(factory, 10, 15);
PooledConnection pclient1(pool);
思路
1、创建对象池ObjectPool ,实现借还
2、在借与还的时候,增加有效性检测判断,保证借出后可用,归还时状态正常
3、创建连接池工厂PoolableObjectFactory,支持创建、删除、有效性检测、激活
4、构造函数时借出,析构时归还
详细参考建议
https://blog.csdn.net/weixin_34392435/article/details/89206440
对象池(连接池)与线程池区别
对象池被动管理,需要自己完成借还
线程池主动管理线程