点播视频网站怎么建设,洛阳网红,宁夏银川冰面出现人脸,网站做好后还需要维护吗提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言管理的字段连接内存管理对象 前言
我们的网络通信框架使用的muduo库#xff0c;而在mudu库中是已经有了连接的概念#xff0c;但是我们呢还有一个信道的概念… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言管理的字段连接内存管理对象 前言
我们的网络通信框架使用的muduo库而在mudu库中是已经有了连接的概念但是我们呢还有一个信道的概念muduo库是没有的。其实muduo库是有一个channel的概念的只不过这个概念和我们这里的channel不一样。 这也就是我们要封装这个模块的意义。 管理的字段
有一个信道内存管理句柄因为一个连接上可以有多个信道。 class Connection{private:muduo::net::TcpConnectionPtr _conn;ProtobufCodecPtr _codec;VirtualHost::ptr _host;ConsumerManager::ptr _cmp;ThreadPool::ptr _pool;ChannelManager::ptr _channels;}提供了三个操作分别是的打开信道关闭信道和获取指定信道。 就是调用信道内存管理句柄进行操作。 打开信道和关闭都是需要给客户端返回响应的。 void openChannel(const openChannelRequestPtr req){bool ret _channels-openChannel(req-cid(),_host,_cmp,_codec,_conn,_pool);if(ret false){return basicResponse(false,req-rid(),req-cid());}return basicResponse(true,req-rid(),req-cid());
}void closeChannel(const closeChannelRequestPtr req){_channels-closeChannel(req-cid());return basicResponse(true, req-rid(), req-cid());
}Channel::ptr getChannel(const std::string cid){return _channels-getChannel(cid);
}连接内存管理对象
服务器上可能会存在多条链接因此我们也需要把连接管理起来 通过一个哈希表建立tcp连接和连接管理对象的映射。
class ConnectionManager{private:std::mutex _mutex;std::unordered_mapmuduo::net::TcpConnectionPtr,Connection::ptr _conns;}提供三个操作新建连接。关闭连接和获取指定连接。 在服务器中就需要管理这个句柄就可以管理所有的channel了。
void newConnection(const VirtualHost::ptr host,const ConsumerManager::ptr cmp,const ProtobufCodecPtr codec,const muduo::net::TcpConnectionPtr conn,const ThreadPool::ptr pool){std::unique_lockstd::mutex lock(_mutex);auto it _conns.find(conn);if (it ! _conns.end()) {return ;}Connection::ptr self_conn std::make_sharedConnection(host,cmp, codec, conn, pool);_conns.insert(std::make_pair(conn, self_conn)); }void delConnection(const muduo::net::TcpConnectionPtr conn){std::unique_lockstd::mutex lock(_mutex);_conns.erase(conn);}Connection::ptr getConnection(const muduo::net::TcpConnectionPtr conn){std::unique_lockstd::mutex lock(_mutex);auto it _conns.find(conn);if (it _conns.end()) {return Connection::ptr();}return it-second;}