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

自律linux 第 35 天

之前学习了UDP编程,UDP是可以实现多个用户向一个用户发送的,但是TCP一个服务端在同一时刻只能对应一个客户端,因为TCP的通信是使用管道通信的,如果要使用TCP实现一对多的通信,有如下几种办法:多进程,多线程,线程池和IO多路复用。多线程和多进程就是每次服务端和客户端连接的时候,都去产生一个子进程或者线程,然后在该进程或者线程里面实现服务端与客户端的通信,如果使用的是进程,要主要对SIGCHLD信号的捕获,回收子进程的空间。如果使用的是线程,则要在创建该线程时为其设置分离属性,让主进程不用等待线程结束,而是让线程结束之后自动回收空间。


还有就是使用线程池,线程池是事先就创建好一些线程,然后当客户端和服务端建立通道之后将通信套接字放入一个队列中,然后让之前创建的线程去从队列中取出套接字,实现通信,本质上还是多线程编程。

还有一种就是多路IO复用,这就相当于一个服务员在几桌客人之前轮流服务,我们需要使用select函数,来检测目前的套接字是否需要响应,程序的套接字都放在fd_set结构体之中,使用select时需要将该结构体的地址传入,内核就对这些存在的套接字进行检查,如果需要响应,就将需要响应的套接字返回在之前的fd_set结构体中,然后通过遍历该结构体内的所有套接字,来对需要响应的套接字做出对应的操作。

相关文章:

  • 【C++】数据结构 双链表的实现(企业存储用户数据的实现)
  • Windows逆向工程入门之MASM 数据寻址
  • GTID模块初始化简介和参数binlog_gtid_simple_recovery
  • C#数据类型及相互转换
  • GitHub获取token
  • 计算光学成像与光学计算概论
  • typedef关键字、using关键字
  • RoboBrain:从抽象到具体的机器人操作统一大脑模型
  • 初阶数据结构习题【11】(3顺序表和链表)——141. 环形链表I
  • vue面试宝典之二
  • Linux14-io多路复用
  • Impacket工具中的横向渗透利器及其使用场景对比详解
  • Vue进阶之Vue3源码解析(二)
  • 零基础学习Python之面向对象编程:属性访问控制与封装实现_我的学习Python记录13
  • QT中使用C++调用 python脚本
  • DeepSeek大模型 —— 全维度技术解析
  • 基于MD5分块哈希的前端图片重复检测方案
  • 系统运维分级掌握知识技能
  • 晶晨S905L3S/S905L3SB芯片烧录-BL(bootloader)加载工具分享
  • 外键 FK enable constraints enq:TM lock
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 巴基斯坦副总理兼外长达尔将访华
  • 海南乐城管理局原局长贾宁已赴省政协工作,曾从河南跨省任职
  • 内蒙古赤峰市城建集团董事长孙广通拟任旗县区党委书记
  • 一女游客在稻城亚丁景区因高反去世,急救两个多小时未能恢复生命体征
  • 博物馆书单|走进博物馆,去体验一场与文明的对话