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

Boost服务器端的acceptor、io_context和socket的理解

完整的场景(使用餐厅接待顾客和电话机的比喻):

  1. 服务器(餐厅)和 acceptor(前台服务员)

    • 服务器就是餐厅,acceptor 是餐厅的前台服务员(接待员)。
    • 这个 acceptor 服务员会 一直在门口等着顾客(客户端)进来。当有顾客走进来时(客户端发起连接请求),acceptor 就会负责接待这个顾客。
  2. io_context(调度员/任务分配员)

    • 当有顾客进来后,服务员并不会自己去直接服务顾客,而是把顾客交给 调度员(io_context
    • 调度员就像任务分配员,负责安排不同的员工(如服务员)去处理具体的顾客服务工作。
    • 这里,io_context 管理和协调所有异步任务(如接受连接、读写数据等)。
  3. socket(电话机)

    • 一旦调度员(io_context)安排服务员(一个 socket)去服务顾客,这个 socket 就像是一台电话机,专门用于和这个特定的顾客进行通信。
    • 在网络通讯的比喻中,这个电话机(socket)就是服务器和客户端之间的数据传输工具。通过 socket,服务器可以发送数据给客户端,也可以接收客户端发来的数据。

步骤详解:

  1. 监听连接(等待顾客):
    • 餐厅服务员(acceptor)一直站在门口,等待顾客(客户端)来光顾。acceptor 使用一个 io_context 来管理它的监听工作。
  2. 顾客到来(连接请求):
    • 当有顾客进来时,服务员(acceptor)马上通知餐厅后面调度员(io_context),表示有新的顾客到来了,得安排一个员工(socket)去服务这个顾客。
  3. 安排服务员(分配 socket):
    • 调度员(io_context)安排一个具体的服务员(创建一个新的 socket 对象)去为这个顾客服务。
    • acceptor接待顾客后,分配一个电话机(socket)给服务员,这样顾客可以通过这个电话机和服务员交流(传输数据)。
  4. 建立通讯(socket 连接):
    • 服务员拿着电话机(socket)开始和顾客交流。电话机就是数据通信的管道,服务员通过这个电话可以和顾客聊订单(传输数据),提供服务(发送/接收数据)。
  5. 处理顾客请求(通讯过程):
    • 一旦电话连接建立,服务员可以不断通过电话和顾客进行交流(读写数据),直到服务结束(连接断开)。
// 1. 创建 io_context 对象
boost::asio::io_context io_context;// 2. 创建一个 acceptor,负责监听连接
boost::asio::ip::tcp::acceptor acceptor(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 8080));// 3. 当 acceptor 监听到连接时,创建一个 socket(电话机)
boost::asio::ip::tcp::socket socket(io_context);// 4. 接受连接,并通过这个 socket 与客户端通信
acceptor.accept(socket);// 5. 现在可以通过 socket 发送/接收数据


http://www.mrgr.cn/news/64880.html

相关文章:

  • STM32之看门狗
  • clickhouse运维篇(三):生产环境一键生成配置并快速部署ck集群
  • Rust 力扣 - 54. 螺旋矩阵
  • 系统架构设计师(软考高级)一站式通关课程
  • 项目一:使用 Spring + SpringMVC + Mybatis + lombok 实现网络五子棋
  • ubuntu20.04 加固方案-检查是否设置登录超时
  • 架构师备考-信息安全
  • 基于 Java 的 Spring Boot 和 Vue 的宠物领养系统设计与实现
  • JVM问题排查分析
  • 各种方法实现瀑布流
  • 026集——CAD动态效果—瞬态实现——vs CAD二次开发
  • 力扣题目解析--罗马数字转整型
  • Linux入门(2)
  • 手机App防沉迷系统
  • ValueError: images do not match
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(3)
  • 14. 数据的输入输出
  • 第六十三周周报 GGNN
  • scIDST:弱监督学习推断单细胞转录组数据中的疾病进展阶段
  • 数据结构与算法(1)
  • 从一到无穷大 #40:DB AI 融合
  • 第三次RHCSA作业
  • Java入门 (6) -- 动态编程的奥秘
  • 视频QoE测量学习笔记(二)
  • masm汇编字符输入输出演示
  • 20221403郑骁恒-TLCP 协议验证