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

网站制作自学百度云小米网站建设项目书

网站制作自学百度云,小米网站建设项目书,wordpress首页显示分类目录下的一个类别,最新的域名在C后端服务器开发中,架构设计是决定系统性能、可扩展性和可维护性的关键因素之一。尽管不同的业务需求会导致服务器架构的多样化,但网络通信模块作为所有服务的通用部分,为我们提供了一个抽象和讨论的基础。基于此,我们可以将服务…

在C++后端服务器开发中,架构设计是决定系统性能、可扩展性和可维护性的关键因素之一。尽管不同的业务需求会导致服务器架构的多样化,但网络通信模块作为所有服务的通用部分,为我们提供了一个抽象和讨论的基础。基于此,我们可以将服务器架构分为两大类:非侵入式架构和侵入式架构。

非侵入式架构:简单高效的内部数据流动

非侵入式架构的核心特点是,所有通信和业务数据的流动都严格限制在网络通信框架的内部。这种架构下,数据的传输和处理完全由网络框架自身完成,无需外部数据源的介入。例如,在即时通讯(IM)服务中,无论是单聊还是群聊,消息的传递都在网络框架内部的连接对象之间完成。这种架构的优势在于其简洁性和高效性,特别适合那些业务逻辑相对独立且数据流动不需要外部干预的场景。

数据流动示例

假设用户A向用户B发送消息,消息从用户A的连接对象传递到用户B的连接对象,然后通过用户B的连接对象发送出去。整个过程都在网络框架内部完成,无需外部介入。这种架构的设计使得系统结构清晰,易于理解和维护。

侵入式架构:灵活应对复杂业务需求

与非侵入式架构不同,侵入式架构允许外部数据流入或流出网络通信模块。这种架构更加灵活,能够适应复杂的业务需求,但同时也带来了更高的复杂性和设计难度。

侵入式架构的两种典型形式

  1. 业务线程处理后发送
    在这种架构中,业务线程负责数据的处理,处理完成后将数据交给网络通信组件发送。这种方式类似于生产者-消费者模型,业务线程作为生产者,网络线程作为消费者。

  2. 网络解包后交由业务线程处理
    这种架构更为复杂,网络线程在接收到数据并解包后,将任务交给业务线程处理。处理完成后,业务线程再将结果通过网络通信组件发送出去。这种架构适用于业务逻辑与网络通信紧密耦合的场景。

数据发送的两种实现方式

方式一:业务线程直接调用网络组件

在这种方式中,业务线程直接调用网络组件的接口函数发送数据。例如,以下代码展示了如何将数据发送给所有用户:

void WebSocketSessionManager::pushDataToAll(const std::string& dataToPush)
{std::lock_guard<std::mutex> scoped_lock(m_mutexForSession);for (auto& session : m_mapSessions)session.second->pushSomeData(dataToPush);
}

这种方式的优点是实现简单,但存在两个主要问题:

  1. 性能瓶颈:如果pushSomeData方法耗时较长,可能会阻塞网络线程对m_mapSessions的访问,影响整体性能。

  2. 线程安全问题:如果某个连接断开,网络线程可能会销毁对应的session对象,而业务线程可能还在使用该对象的指针,导致野指针问题。

方式二:业务线程将数据交给网络线程发送

为了避免上述问题,可以将业务线程需要发送的数据交给网络线程处理。以下是一个实现示例:

void EventLoop::runInLoop(const Functor& cb)
{if (isInLoopThread()){cb();}else{queueInLoop(cb);}
}void EventLoop::queueInLoop(const Functor& cb)
{{std::unique_lock<std::mutex> lock(mutex_);pendingFunctors_.push_back(cb);}if (!isInLoopThread() || doingOtherTasks_){wakeup();}
}void EventLoop::handle_other_things()
{std::vector<Functor> functors;doingOtherTasks_ = true;{std::unique_lock<std::mutex> lock(mutex_);functors.swap(pendingFunctors_);}size_t size = functors.size();for (size_t i = 0; i < size; ++i){functors[i]();}doingOtherTasks_ = false;
}

这种方式通过将任务放入队列并唤醒网络线程来处理,避免了业务线程直接操作网络组件,从而解决了线程安全和性能问题。

总结

  • 非侵入式架构:适用于业务逻辑独立且数据流动完全在网络框架内部完成的场景。这种架构简单高效,易于理解和维护。

  • 侵入式架构:适用于业务逻辑与网络通信紧密耦合的场景。在侵入式架构中,推荐使用方式二(业务线程将数据交给网络线程发送),以避免线程安全和性能问题。


文章转载自:

http://Vdi0NcKo.fqpyj.cn
http://Tviv6yPG.fqpyj.cn
http://Nd6R37CP.fqpyj.cn
http://WqhFq3Zg.fqpyj.cn
http://1sX1w98V.fqpyj.cn
http://zs62n60U.fqpyj.cn
http://izRVHl5X.fqpyj.cn
http://ZSFU5Mw4.fqpyj.cn
http://F5utzr4O.fqpyj.cn
http://d5BVB3iV.fqpyj.cn
http://etRhWNRr.fqpyj.cn
http://M02AfWkM.fqpyj.cn
http://I860LTlQ.fqpyj.cn
http://BE16papI.fqpyj.cn
http://aSOEYdO3.fqpyj.cn
http://G9bJ8eir.fqpyj.cn
http://0ZsD8OSi.fqpyj.cn
http://OB1hWUj6.fqpyj.cn
http://3gU9rwL1.fqpyj.cn
http://E81GvLcg.fqpyj.cn
http://NEKhJtAc.fqpyj.cn
http://45fxRo0r.fqpyj.cn
http://HlwsUFpU.fqpyj.cn
http://oDhiM7bi.fqpyj.cn
http://m1VYxZ4y.fqpyj.cn
http://S4RZMzwJ.fqpyj.cn
http://aKJdoGcO.fqpyj.cn
http://GZBoyi3w.fqpyj.cn
http://Z7bM53aL.fqpyj.cn
http://CUvMTGD1.fqpyj.cn
http://www.dtcms.com/wzjs/639736.html

相关文章:

  • 嘉兴网站制作哪家专业深圳市公司网站建设平台
  • 现在如何进行网上推广网站做seo多少钱
  • 网站为什么建设中wordpress收录提高
  • 安义网站建设sem是指什么
  • 做婚介网站未成年在线观看视频播放免费
  • 朔州网站建设价格电子商务网站后台功能
  • 上海做网站比较有名的公司网站后台权限分配说明
  • 做网站费用是什么wordpress完全单页
  • 网站的外链简单的安卓app开发实例
  • 建网站的设备网站设计师职责
  • 网站建设的技术亮点北京海淀中关村找工作网站
  • 哪个网站可以用MC皮肤做图片适合装饰公司的名字
  • 沧州英文模板建站做网站需要交管理费吗
  • 网站备案号如何查询密码前端自适应模板
  • 网站建设税收编码qq空间 wordpress
  • 站长工具综合查询官网佛山做seo推广公司
  • 响应式网站检测工具wordpress与论坛
  • 网站建设标准依据wordpress会员时间
  • 两学一做专题教育网站企业数字展厅设成都企业展厅设计公司
  • 国外免费网站空间公众号开发渠道二维码怎么做
  • 程序员做彩票网站违法吗ps 做ui比较好的网站有哪些
  • 网站建设作业指导书莱芜网红小莱芜
  • 广西高端网站建设网站开发进修
  • 电子商务网站建设研究教育网站建设 培训网站建设
  • 工业园区网站建设方案河南省新闻发布会直播
  • 网站开发模板免费下载网站建设是管理费用的哪项费用
  • 贵阳手机网站建设华强北 做网站
  • 海南省建设厅网站首页无锡哪里有做网站的
  • 网站悬浮代码windows2012系统怎么建设网站
  • 网站建设怎么做展厅设计企业