详解Epoll(2) 前一篇介绍了epoll的LT模式,LT模式注意epollout事件在数据全部写成功后需要取消关注,或者更改为EPOLLIN。 而这次epoll的ET模式,要注意的是在读和写的过程中要在循环中写完或者读完所有数据,确保不要丢掉一些数据。 因为epoll ET模式只在两种边缘更改的时候触发,对于读事件只在内核缓冲区由空变为 非空通知一次用户,对于写事件,内核缓冲区只在由满变为非满的情况通知用户一次。& 网络编程 2025-05-03 qc
详解Epoll(1) 网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区,好比是一个水池,当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区,然后从 socket发送缓冲区发出去, 当用户要读取数据时,就是从socket内核读缓冲区读到用户缓冲区。所以TCP中recv, send, read, write等函数并不是真的直接读写 发送报文,而是将数据分别写到so 网络编程 2025-04-30 qc
Cookie、Session、Token、JWT 什么是 Cookie cookie 重要的属性: 什么是 Session session 认证流程: 根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。 Cookie 和 Session 的区别 什么是 Token(令牌) Acesss Token 特点: token 的身份验证流程: 每一次请求都需要携带 to c++学习总结 go学习总结 2025-03-07 qc
Asio多线程模型:IOServicePool 单线程和多线程对比 之前的单线程模式图如下 我们设计的IOServicePool类型的多线程模型如下: IOServicePool多线程模式特点 1 每一个io_context跑在不同的线程里,所以同一个socket会被注册在同一个io_context里,它的回调函数也会被单独的一个线程回调,那么对于同一个socket,他的回调函数每次触发都是在同一个线程里,就不会有线程安全问题,网络io层面 网络编程 2024-12-12 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
c++锁的使用 本文介绍C++ 并发中使用的其他类型的锁,包括unique_lock,shared_lock, 以及recursive_lock等。shared_lock和unique_lock比较常用,而recursive_lock用的不多,或尽可能规避用这种锁。 unique_lock unique_lock和lock_guard基本用法相同,构造时默认加锁,析构时默认解锁,但unique_lock有个好处就 并发编程 2024-09-28 qc
c++并发三剑客 async用法 std::async 是一个用于异步执行函数的模板函数,它返回一个 std::future 对象,该对象用于获取函数的返回值。 以下是一个使用 std::async 的示例: 在这个示例中,std::async 创建了一个新的线程(或从内部线程池中挑选一个线程)并自动与一个 std::promise 对 并发编程 2024-09-05 qc