Asio多线程模型:IOServicePool 单线程和多线程对比 之前的单线程模式图如下 我们设计的IOServicePool类型的多线程模型如下: IOServicePool多线程模式特点 1 每一个io_context跑在不同的线程里,所以同一个socket会被注册在同一个io_context里,它的回调函数也会被单独的一个线程回调,那么对于同一个socket,他的回调函数每次触发都是在同一个线程里,就不会有线程安全问题,网络io层面 网络编程 2024-12-12 qc
C++项目:仿 RabbitMQ 实现的简易消息队列 整体架构 一、概念性框架理解 我们主要实现的内容: 二、服务端模块概要设计一、交换机数据管理模块1.要管理的数据:描述了一个交换机应该有什么数据 1.交换机名称:唯一标识2.交换机类型:决定了消息的转发方式每个队列绑定中有个binding_key,每条消息中有个routing_key 3.持久化标志:决定了当前交换机信息是否需要持久化存储4.自动删除标志:指的是关联了当前交换机的所有客户端都退出了,是否要自 c++项目 2024-10-22 qc
Asio学习:有缺陷的异步服务器 Session类 Session类主要是处理客户端消息收发的会话类,为了简单起见,我们不考虑粘包问题,也不考虑支持手动调用发送的接口,只以应答的方式发送和接收固定长度(1024字节长度)的数据。 1、 _data用来接收客户端传递的数据 2、 _socket为单独处理客户端读写的socket。 3 、handle_read和handle_write分别为读回调函数和写回调函数。 接下来我们实现Se 网络编程 2024-10-21 qc
Asio学习:同步读写的客户端与服务端 客户端设计 客户端设计基本思路是根据服务器对端的ip和端口创建一个endpoint,然后创建socket连接这个endpoint,之后就可以用同步读写的方式发送和接收数据了。 服务器 session函数 创建session函数,该函数为服务器处理客户端请求,每当我们获取客户端连接后就调用该函数。在session函数里里进行echo方式的读写,所谓echo就是应答式的处理 创建线程调用session 网络编程 2024-10-20 qc
Asio学习:socket连接建立与buffer结构 网络编程基本流程 网络编程的基本流程对于服务端是这样的 服务端 1)socket----创建socket对象。 2)bind----绑定本机ip+port。 3)listen----监听来电,若在监听到来电,则建立起连接。 4)accept----再创建一个socket对象给其收发消息。原因是现实中服务端都是面对多个客户端,那么为了区分各个客户端,则每个客户端都需再分配一个socket对象进行收发 网络编程 2024-10-19 qc
项目总结:muduo网络库的整体流程 Unix/Linux上的五种IO模型 好的网络服务器设计 在这个多核时代,服务端网络编程如何选择线程模型呢? 赞同libev作者的观点:one loop perthread is usually a good model,这样多线程服务端编程的问题就转换为如何设计一个高效且易于使用的event loop,然后每个线程run一个event loop就行了(当然线程间的同步、互斥少不了,还有其它的耗时 c++项目 2024-10-07 qc