IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 《ZLToolKit源码学习笔记》(19)网络模块之套接字封装 -> 正文阅读

[网络协议]《ZLToolKit源码学习笔记》(19)网络模块之套接字封装

系列文章目录

《ZLToolKit源码学习笔记》(1)VS2019源码编译

《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析

《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析

《ZLToolKit源码学习笔记》(4)工具模块之消息广播器

《ZLToolKit源码学习笔记》(5)工具模块之资源池

《ZLToolKit源码学习笔记》(6)线程模块之整体框架概述

《ZLToolKit源码学习笔记》(7)线程模块之线程池组件:任务队列与线程组

《ZLToolKit源码学习笔记》(8)线程模块之线程负载计算器

《ZLToolKit源码学习笔记》(9)线程模块之任务执行器

《ZLToolKit源码学习笔记》(10)线程模块之线程池

《ZLToolKit源码学习笔记》(11)线程模块之工作线程池WorkThreadPool

《ZLToolKit源码学习笔记》(12)事件轮询模块之整体框架概述

《ZLToolKit源码学习笔记》(13)事件轮询模块之管道的简单封装

《ZLToolKit源码学习笔记》(14)事件轮询模块之定时器

《ZLToolKit源码学习笔记》(15)事件轮询模块之事件轮询器EventPoller

《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述

《ZLToolKit源码学习笔记》(17)网络模块之基础接口封装类SockUtil

《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存

《ZLToolKit源码学习笔记》(19)网络模块之套接字封装(本文)


前言

套接字抽象封装,包含TCP服务器、TCP客户端(TCP session)、UDP套接字、与EventPoller关联处理描述符事件,数据发送以及接收处理等。


目录

?????系列文章目录

前言

一、概述

二、功能分析

2.1、SockFD、SocketNum

2.2、Socket

2.2.1、仅用于TCP Server监听

2.2.2、仅用于TCP Client

2.2.3、仅用于UDP

2.2.4、通用接口

2.3、SocketHelper

2.4、MutexWrapper


一、概述

以上,是套接字封装模块的类图以及每个类的大致功能,上层使用最多的是Socket和SocketHelper两个类。

二、功能分析

2.1、SockFD、SocketNum

描述符封装,SockNum作为SockFD的成员变量,SockFD作为Socket的成员变量。

??

2.2、Socket

Socket封装了针对文件描述符的各种操作,包括TCP与UDP套接口基础概念封装、数据的发送与接收控制、事件回调处理等。

Socket可用于TCP Server监听(listen socket)、TCP Server会话(accept后的socket)、TCP Client、UDP Server/Client类型。

根据以上类型,可以将Socket封装的众多接口进行分类:

2.2.1、仅用于TCP Server监听

listen、cloneFromListenSocket、SetOnAccept、setOnBrforeAccept

2.2.2、仅用于TCP Client

connect

2.2.3、仅用于UDP

bindUdpSock、bindPeerAddr

2.2.4、通用接口

ALL:createSocket、emitErr、enableRecv、rawFD、sockType、getPoller、closeSock

TCP Server监听除外:setOnRead、setSendTimeOutSecond、isSocketBusy、setSendFlags、getSendBufferCount、elapsedTimeAfterFlushed、send、setOnSendResult、setOnFlush

2.3、SocketHelper

Socket对象的包装类,Socket作为其保护成员变量,它的派生类中可以直接操作。

使用Socket发送数据,必须调用其send接口,而SocketHelper扩展了发送数据的方式,它支持使用<<运算符以及可以发送重载了ostringstream<<的任意类型的对象,这是因为它继承了SocketSender类,此时必须实现send(Buffer::Ptr buf)纯虚函数。

如果A Poller线程收到的客户端socket数据,在之前该socket已经被添加到B Poller线程去处理了,此时,则需要将数据转移到B Poller线程,需要异步的将任务添加进去。基于此,SocketHelper继承实现了TaskExecutorInterface接口类。比如,A线程是UDP Server,收到某客户端第一次发送数据时(视为客户端连接),使用bind和connect重新创建一个与该客户端关联的socket,然后将该socket放在B线程中管理,后续该客户端的所有数据将由新的socket处理。但是,可能在socket被放到B线程管理之前,客户端发送数据比较快,原来的A线程又收到了数据,此时就需要将A线程收到的数据转移到B线程去处理。

继承自SocketHelper的类目前有两个,Session和TcpClient。

2.4、MutexWrapper

对锁进行封装,可以设置锁是否生效,用于Socket类中,如果针对Socket的操作都在同一个线程,则可以不用加锁,如果可能被多个线程访问,则需要加锁。从代码中使用来看,目前仅TcpClient设置了锁生效。这是因为TcpClient是在用户线程中创建,用户线程和Poller线程都会对socket进行操作。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:28:51  更:2022-01-16 13:29:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/8 5:41:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码