![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux通信架构
文章平均质量分 64
linux网络编程学习笔记
try my best c
这个作者很懒,什么都没留下…
展开
-
5-08 通讯代码精粹之epoll函数实战2-2
一:ET,LT模式深入分析及测试LT:水平触发/低速模式,这个事件没处理完,就会被 一直触发; ET:边缘触发/告诉模式,这个事件通知只会出现一次;普遍认为ET比LT效率高一些,但是 ET编程难度比LT大一些; ET模式下,如果没有数据可接收,则recv会返回-1思考:为什么ET模式事件只触发一次[事件被扔到双向链表中一次,被epoll_wait取出后就干掉]LT模式事件会触发多次呢?[事件如果没有处理完,那么事件会被多次往双向链表中扔]如何选择ET,还是LT 如果收发数据包有固定格式【后原创 2022-03-29 13:49:38 · 64 阅读 · 0 评论 -
4-01 服务器程序目录规划、makefile编写
一:信号高级认识范例ps -eo pid,ppid,sid,tty,pgrp,comm,stat,cmd | grep -E ‘bash|PID|nginx’用kill 发送 USR1信号给进程(1)执行信号处理函数被卡住了10秒,这个时候因为流程回不到main(),所以main中的语句无法得到执行;(2)在触发SIGUSR1信号并因此sleep了10秒种期间,就算你多次触发SIGUSR1信号,也不会重新执行SIGUSR1信号对应的信号处理函数,而是会等待上一个SIGUSR1信号处理函数执行完毕原创 2022-03-29 13:40:58 · 108 阅读 · 0 评论 -
4-02 读配置文件、查泄漏、设置标题实战
一:基础设施之配置文件读取(1.1)前提内容和修改 使用配置文件,使我们的服务器程序有了极大的灵活性,是我们作为服务器程序开发者,必须要首先搞定的问题;配置文件:文本文件,里边除了注释行之外不要用中文,只在配置文件中使用字母,数字下划线 以#号开头的行作为注释行(注释行可以有中文)我们这个框架(项目),第一个要解决的问题是读取配置文件中的配置项(读到内存中来);(1.2)配置文件读取功能实战代码 写代码要多顾及别人感受,让别人更容易读懂和理解,不要刻意去炫技;这种炫技的人特别讨厌;该缩原创 2022-03-29 13:38:31 · 108 阅读 · 0 评论 -
5-09 ET、LT深释,服务器设计、粘包解决
epoll的模式讲解原创 2022-03-29 13:30:29 · 295 阅读 · 1 评论 -
5-06 通讯代码精粹之epoll函数实战1
一:一个更正,一个注意更正:kqueue注意:即将进入最重要,最核心的内容讲解;戒骄戒躁,代码精华。简单,容易理解;大家要认真学习老师给出来的代码;二:配置文件的修改增加worker_connections项三:epoll函数实战epoll_create(),epoll_ctl(),epoll_wait();系统提供的函数调用(3.1)ngx_epoll_init函数内容epoll_create():创建一个epoll对象,创建了一个红黑树,还创建了一个双向链表;连接池: 数组,元原创 2022-03-10 16:11:05 · 2995 阅读 · 0 评论 -
3-3信号的基本概念
1信号的基本概念,发送信号killSIGHUP是一个信号信号,事件通知,信号是异步发送的,信号被称为软件中断信号是怎么产生的:(a)某个进程发送给另外一个进程或者发送给自己(b)由内核(操作系统)发送给某个进程通过在键盘上输入命令ctr+c(中断信号) kill命令b.2内存访问有问题,除数为0信号名字,都是以SIG开头的,SIGHUP是终端断开信号UNIX以及类UNIX操作系统(linux,freebsd,solaris);支持的信号数量各不相同10-60多之间信号都是正整数常量gc原创 2022-03-10 14:53:21 · 680 阅读 · 0 评论 -
3-2终端和进程的关系
每开启一个终端就会多一个bash进程出来ps -ef | grep bash每连接一个虚拟终端的Linux系统就会出现一个bash进程;shell[壳]的意思(用与解释用户输入的命令)bash=shell=命令行解释器bash时是一个可执行程序pts时虚拟终端,一个连接到虚拟机的虚拟终端终端上开启进程ps -laman ps //可以用来查看ps的功能一个终端对应一个bash随着终端的退出,这个终端上运行的进程也退出可执行程序nginx是bash的子进程./nginx是执行ba原创 2022-03-10 14:50:36 · 2534 阅读 · 0 评论 -
2-2 nginx整体结构
master进程和worker进程启动Nginx,看到了一个worker进程和master进程ps -ef 命令UID 进程所属的用户id进程ID( PID)用来唯一的标识一个进程PPID ,fork() ,worker进程是被master进程创建起来的;这种工作机制保证了Nginx能够稳定,灵活的运行nginx进程模型(1)一个master进程,一个或多个worker进程(2)master进程看别人干活的,worker干主要的活(3)master和worker进程的通信,可以用信号,也可原创 2022-03-10 14:46:25 · 3137 阅读 · 0 评论 -
5-04 listen()队列剖析、阻塞非阻塞、同步异步
一:listen()队列剖析listen():监听端口,用在 TCP连接 中的 服务器端 角色; listen()函数调用格式: int listen(intsockfd, int backlog); 要理解好backlog这个参数,我们需要先谈一谈 “监听套接字 队列”的话题;(1.1)监听套接字的队列对于一个调用listen()进行监听的套接字,操作系统会给这个套接字 维护两个队列; a)未完成连接队列 【保存连接用的】 当客户端发送tcp连接三次握手的第一次【syn包原创 2022-03-10 14:31:20 · 140 阅读 · 0 评论 -
5-3-01TCP状态转换
一:TCP状态转换同一个IP(INADDR_ANY),同一个端口SERV_PORT,只能被成功的bind()一次,若再次bind()就会失败,并且显示:Address already in use就好像一个班级里不能有两个人叫张三;结论:相同IP地址的相同端口,只能被bind一次;第二次bind会失败;介绍命令netstat:显示网络相关信息-a:显示所有选项-n:能显示成数字的内容全部显示成数字-p:显示段落这对应程序名netstat -anp | grep -E 'State|9000'原创 2022-03-08 14:54:30 · 169 阅读 · 0 评论 -
5-02-01
一:TCP连接的三次握手tcp:可靠的,面向连接的协议udp:不可靠的,无连接的协议大家必须要懂的TCP的三次握手,只有TCP有三次握手【UDP没有】(1.1)最大传输单元MTUMTU(Maximum Transfer Unit):最大传输单元;MTU:每个数据包包含的数据最多可以有多少个字节;1.5K左右;你要发送100K,操作系统内部会把你这100K数据拆分成若干个数据包【分片】,每个数据包大概1.5K之内【大概拆解成68个包】;对端重组;我们只需要知道有 拆包,组包; 这68个包原创 2022-03-08 12:48:44 · 63 阅读 · 0 评论