当前位置: 首页 > news >正文

宁波网站开发定制成都纯手工seo

宁波网站开发定制,成都纯手工seo,西宁市城市道路建设规划网站,有什么网站帮做邀请函设计的提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言管理的字段 前言 搭建一个网络服务器,在内部提供各个业务接口即可。 在业务处理函数中,每次请求过来找到对应的信道,通过信…

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 管理的字段


前言

搭建一个网络服务器,在内部提供各个业务接口即可。
在业务处理函数中,每次请求过来找到对应的信道,通过信道句柄调用前边封装好的处理接口进行处理,最后返回响应即可。


管理的字段

服务器需要管理的字段,其中需要搭建一个tcp服务器。然后就是我们业务所需的句柄,一个是虚拟机管理句柄,消费者管理句柄,连接管理句柄和线程池句柄。

 class Server
{
private:using MessagePtr = std::shared_ptr<google::protobuf::Message>;muduo::net::TcpServer _server;muduo::net::EventLoop _baseloop;ProtobufCodecPtr _codec;        // 协议处理器 对收到的请求进行protobuf协议处理ProtobufDispatcher _dispatcher; // 请求分发器VirtualHost::ptr _host;ConsumerManager::ptr _consumer_manager;ConnectionManager::ptr _connection_manager;ThreadPool::ptr _pool;
}

我们需要为服务器注册业务请求处理函数。muduo库是支持protobuf协议的处理的。

// 注册请求处理函数
_dispatcher.registerMessageCallback<openChannelRequest>(std::bind(&Server::OnOpenChannel,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<closeChannelRequest>(std::bind(&Server::OnClodeChannle,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<declareExchangeRequest>(std::bind(&Server::OnDeclareExchange,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<deleteExchangeRequest>(std::bind(&Server::OnDeleteExchange,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<declareQueueRequest>(std::bind(&Server::OnDeclareQueue,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<deleteQueueRequest>(std::bind(&Server::OnDeleteQueue,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<queueBindRequest>(std::bind(&Server::onQueueBind,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<queueUnBindRequest>(std::bind(&Server::onQueueUnBind,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<basicPublishRequest>(std::bind(&Server::onBasicPublish,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<basicAckRequest>(std::bind(&Server::onBasicAck,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<basicConsumeRequest>(std::bind(&Server::onBasicConsume,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
_dispatcher.registerMessageCallback<basicCancelRequest>(std::bind(&Server::onBasicCancel,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));}

当新连接建立时,我们需调用连接句柄创建一个新连接。
而连接断开时,需要删除连接对象。

void onConnection(const muduo::net::TcpConnectionPtr &conn){if (conn->connected() == true){LOG_INFO << "新连接建立了";_connection_manager->newConnection(_host,_consumer_manager,_codec,conn,_pool);}else{LOG_INFO << "连接断开了";_connection_manager->delConnection(conn);}}

而其他注册的业务处理函数也比较简答,大体流程就是通过连接找到对应的连接管理对象,然后通过请求中的rid字段找道连接管理中的对应信道。调用信道中封装好的处理接口进行处理即可。

void OnDeclareExchange(const muduo::net::TcpConnectionPtr &conn,const declareExchangeRequestPtr &message,muduo::Timestamp){Connection::ptr mconn =  _connection_manager->getConnection(conn);if(mconn.get() == nullptr){DLOG("声明交换机时,没有找到连接对应的Connection对象!");conn->shutdown();return;}Channel::ptr cp = mconn->getChannel(message->cid());if(cp.get() == nullptr){DLOG("声明交换机时,没有找到信道!");conn->shutdown();return;}return cp->declareExchange(message);
}

这里有两个比较特殊,一个打开信道,一个是关闭信道
这两个操作是通过连接找到连接管理对象,然后调用连接管理对象提供的打开信道和关闭信道操作进行处理。

void OnOpenChannel(const muduo::net::TcpConnectionPtr &conn,const openChannelRequestPtr &message,muduo::Timestamp){Connection::ptr mconn = _connection_manager->getConnection(conn);if(mconn.get() == nullptr){DLOG("打开信道时,没有找到连接对应的Connection对象!");conn->shutdown();return;}return mconn->openChannel(message);
}
//关闭信道
void OnClodeChannle(const muduo::net::TcpConnectionPtr &conn,const closeChannelRequestPtr &message,muduo::Timestamp){Connection::ptr mconn = _connection_manager->getConnection(conn);if(mconn.get() == nullptr){DLOG("关闭信道时,没有找到连接对应的Connection对象!");conn->shutdown();return;}return mconn->closeChannel(message);
}

在构造函数的时候,由于队列消费者是以队列为单位管理的,所以我们要获取已经存在的队列,来进行队列消费者的初始化。

//消费者是按照队列为单元进行管理的,针对历史消息中的所有队列,需要初始化队列的消费者管理结构QueueConsumerstd::unordered_map<std::string, mq::MsgQueue::ptr> mqmp =  _host->allQueue();for(auto &mq : mqmp){_consumer_manager->initQueueConsumer(mq.first);}
http://www.zhongyajixie.com/news/59430.html

相关文章:

  • 做棋牌网站犯法吗盘多多网盘资源库
  • 预约网站如何自己做品牌宣传文案范文
  • 北京疫情防控最新消息长沙网站seo优化排名
  • wordpress整站数据转移app推广引流
  • 购买腾讯云主机可以直接做网站外贸推广平台哪家好
  • 宁德5g网站建设公司百度收录网址提交
  • 福田做棋牌网站建设哪家公司便宜sem竞价开户
  • 十堰做网站的工作室百度优化
  • 网店店铺装修怎么做360排名优化工具
  • 网站上的洗衣液瓶子做花瓶怎么材质广州seo优化外包公司
  • 刺猬猫网站维护北京官网优化公司
  • 网站关键词几个合适上海网站建设咨询
  • 别人用我的备案信息做网站门户网站制作
  • wordpress还有人在用吗搜索引擎优化排名优化培训
  • 网站建设费用标准搜索seo神器
  • 泉州建设工程招投标信息网seo外包公司多吗
  • 简单手机网站开发软件有哪些新闻发布会
  • 怎么邀约客户做网站微信怎么推广找客源
  • 武汉网站推广费用网站卖链接
  • wordpress示例页面seo技巧分享
  • 餐饮行业做微信网站有什么好处品牌营销的四大策略
  • 卖掉的网站了对方用来做违法百度手机端排名
  • 蓝色科技企业网站模板免费下载企业网站页面设计
  • 做jsp网站用哪些软件最新国内新闻50条简短
  • 佛山品牌网站设计制作学开网店哪个培训机构好正规
  • 动漫制作专业课程南宁seo排名外包
  • wordpress主题在线帮助中心厦门网站推广优化哪家好
  • 做外贸都有哪些网站免费建立一个网站
  • 做网站现在什么尺寸合适百度云盘搜索引擎入口
  • siteservercms做的网站在后台进行修改教程好的seo平台