标签: 网络编程

7 篇文章

网络编程深层剖析
为什么需要 EPOLLONESHOT? epoll 有两种触发的方式:LT(水平触发)和ET(边缘触发)。对于前者,只要存在着事件就会不断的触发,直到处理完成;而后者只触发一次相同事件,或者说只在从非触发到触发两个状态转换的时候才触发。 想象这样一种情况,当前是多线程在处理,一个 socket 事件到来,数据开始解析。这时候这个 socket 又来…
基于 Linux 的轻量级 HTTP 服务器
要点 1.服务器程序通常需要处理三类事件:I/O事件,信号及定时事件。有两种事件处理模式: Reactor模式:要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生(可读、可写),若有,则立即通知工作线程(逻辑单元),将socket可读可写事件放入请求队列,交给工作线程处理。 Proactor模式:将所有的I/O操作都交给主线程和内核来…
Linux网络编程 Part5 libevent
概述 优点: 开源 精简 支持跨平台 专注于网络通信 源码包安装步骤:可参考具体README文件 ./configure检查安装环境,生成makefile make生成.o和可执行文件 sudo make install 将必要的资源拷贝至系统指定目录 进入sample目录,运行demo验证是否安装成功 编译使用库的.c时,需要加-levent选项…
Linux网络编程 Part4 高并发服务器之二
线程池并发服务器 为什么要引入线程池,不直接用之前的多线程并发? 因为多线程并发要频繁地对线程进行创建与销毁(一旦有客户端传来需求,就创建一个新线程,通信结束就立刻销毁该线程),这会占用大量的CPU时间并导致不必要的系统开销 相关结构体 线程池结构体:描述线程池相关信息 pthread_mutex_t lock; /* 用于锁住本结构体 */ pt…
Linux网络编程 Part2 Socket编程
预备知识 网络套接字socket 属于Linux特殊文件类型(管道、套接字、字符设备、块设备) 一个文件描述符指向一个套接字(该套接字内部由内核借助两个缓冲区实现) 在通信过程中, 套接字一定是成对出现的 类比前面进程通信中的管道:一个管道掌控着两个文件描述符和一个缓冲区,而一个套接字掌控着一个文件描述符和两个缓冲区 ps:图中画的不恰当,数据流通…
Linux网络编程 Part1 网络基础
协议 协议:从应用角度讲,协议就是一组规则,用于数据的传输和解释 典型协议 应用层:HTTP、FTP、NFS、SSH、telnet 传输层:TCP、UDP 网络层:IP、ICMP、IGMP 链路层:以太网帧协议、ARP 网络应用程序设计模式 c/s模式: 客户端服务器端架构 client/server 优点: 可以缓存数据,提高传输效率 协议选择灵…