![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux网络编程
囚牢-峰子
这个作者很懒,什么都没留下…
展开
-
Linux网络编程:自己动手写高性能HTTP服务器框架(三)
buffer对象buffer,顾名思义,就是一个缓冲区对象,缓存了从套接字接收来的数据以及需要发往套接字的数据。如果是从套接字接收来的数据,事件处理回调函数在不断地往 buffer 对象增加数据,同时,应用程序需要不断把 buffer 对象中的数据处理掉,这样,buffer 对象才可以空出新的位置容纳更多的数据。如果是发往套接字的数据,应用程序不断地往 buffer 对象增加数据,同时...原创 2020-03-23 21:53:42 · 379 阅读 · 1 评论 -
Linux网络编程:自己动手写高性能HTTP服务器框架(二)
I/O模型和多线程模型实现多线程设计的几个考虑...原创 2020-03-20 19:10:45 · 314 阅读 · 1 评论 -
Linux网络编程:自己动手写高性能HTTP服务器框架(一)
需求总结原创 2020-03-19 20:47:52 · 345 阅读 · 1 评论 -
Linux网络编程 - 剖析 epoll 的底层实现
基本数据结构...原创 2020-03-17 21:28:02 · 492 阅读 · 2 评论 -
Linux网络编程 - 异步 I/O 的探讨
概念...原创 2020-03-13 18:27:57 · 440 阅读 · 1 评论 -
Linux网络编程 - 子线程使用poll处理连接 I/O事件(高并发高性能进阶篇)
这一篇我们就将 acceptor 上的连接建立事件和已建立连接的 I/O 事件分离,形成所谓的主 - 从 reactor 模式。主 - 从 reactor 模式主 - 从这个模式的核心思想是,主反应堆线程只负责分发 Acceptor 连接建立,已连接套接字上的 I/O 事件交给 sub-reactor 负责分发。其中 sub-reactor 的数量,可以根据 CPU 的核数来灵活设置。...原创 2020-03-03 21:02:19 · 1401 阅读 · 1 评论 -
Linux网络编程 - 阻塞I/O 的进程模型 和 线程模型
阻塞I/O的进程模型阻塞I/O的线程模型...原创 2020-03-03 18:27:15 · 429 阅读 · 1 评论 -
Linux网络编程 - C10K问题:高并发模型的设计初篇
C10K问题这一篇,借着C10K 问题,系统地梳理一下高性能网络编程的方法论。C10K 问题是这样的:如何在一台物理机上同时服务 10000 个用户?这里 C 表示并发,10K 等于 10000。得益于操作系统、编程语言的发展,在现在的条件下,普通用户使用 Java Netty、Libevent 等框架或库就可以轻轻松松写出支持并发超过 10000 的服务器端程序,甚至于经过优化之后可以...原创 2020-03-02 16:38:07 · 424 阅读 · 1 评论 -
Linux网络编程 - epoll
下面有一张图,这张图来自 The Linux Programming Interface(No Starch Press)。它直观地为我们展示了 select、poll、epoll 几种不同的 I/O 复用技术在面对不同文件描述符大小时的表现差异。 从图中可以明显地看到,epoll 的性能是最好的,即使在多达 10000 个文件描述的情况下,其性能的下降和...原创 2020-02-29 21:22:11 · 423 阅读 · 1 评论 -
Linux网络编程 - 非阻塞I/O
阻塞 VS 非阻塞...原创 2020-02-28 19:00:26 · 262 阅读 · 1 评论 -
Linux网络编程 - 另一种I/O多路复用:poll
上一讲我们讲到了 I/O 多路复用技术,并以 select 为核心,展示了 I/O 多路复用技术的能力。select 方法是多个 UNIX 平台支持的非常常见的 I/O 多路复用技术,但是它有一个缺点,那就是所支持的文件描述符的个数是有限的。在 Linux 系统中,select 的默认最大值为 1024。poll 函数和 select 相比,poll 和内核交互的数据结构有所变化,另外,也...原创 2020-02-27 18:37:11 · 190 阅读 · 1 评论 -
Linux网络编程 - select
I/O 多路复用...原创 2020-02-26 21:04:08 · 317 阅读 · 1 评论 -
Linux网络编程 - 检查数据的有效性
在前面,我们仔细分析了引起故障的原因,并且已经知道为了应对可能出现的各种故障,必须在程序中做好防御工作。...原创 2020-02-25 19:13:52 · 243 阅读 · 1 评论 -
Linux网络编程 - TCP并不总是可靠的
TCP的不可靠性...原创 2020-02-21 21:15:22 · 300 阅读 · 1 评论 -
Linux网络编程 - 如何理解TCP的“流”?
TCP 是一种流式协议...原创 2020-02-18 19:05:26 · 363 阅读 · 1 评论 -
Linux网络编程 - 处理“Address in use”的报错信息
从例子开始先看TCP 服务器端程序:static int count;static void sig_int(int signo) { printf("\nreceived %d datagrams\n", count); exit(0);}int main(int argc, char **argv) { int listenfd; list...原创 2020-02-14 19:01:40 · 1447 阅读 · 1 评论 -
Linux网络编程 - 理解TCP协议中的动态数据传输
这一篇主要从 TCP 角度看数据流的发送和接收,更通俗易懂的剖析发送窗口、接收窗口、拥塞窗口等。在前面的内容中,我们已经熟悉如何通过套接字发送数据,比如使用 write 或者 send 方法来进行数据流的发送。调用这些接口并不意味着数据被真正发送到网络上,其实,这些数据只是从应用程序中被拷贝到了系统内核的套接字缓冲区中,或者说是发送缓冲区中,等待协议栈的处理。至于这些数据是什么时候被发送出去的...原创 2020-02-14 17:17:34 · 310 阅读 · 1 评论 -
Linux网络编程 - 连接无效:使用 Keep-Alive 还是 应用心跳检测?
从一个例子开始有一个基于 NATS 消息系统的项目,多个消息的提供者 (pub)和订阅者(sub)都连到 NATS 消息系统,通过这个系统来完成消息的投递和订阅处理。突然有一天,线上报了一个故障,一个流程不能正常处理。经排查,发现消息正确地投递到了 NATS 服务端,但是消息订阅者没有收到该消息,也没能做出处理,导致流程没能进行下去。通过观察消息订阅者后发现,消息订阅者到 NATS 服务端的连...原创 2020-02-12 19:05:02 · 651 阅读 · 1 评论 -
Linux网络编程 - close OR shutdown?
我们知道,一个 TCP 连接需要经过三次握手进入数据传输阶段,最后来到连接关闭阶段。在最后的连接关闭阶段,我们需要重点关注的是“半连接”状态。因为 TCP 是双向的,这里说的方向,指的是数据流的写入 - 读出的方向。比如客户端到服务器端的方向,指的是客户端通过套接字接口,向服务器端发送 TCP 报文;而服务器端到客户端方向则是另一个传输方向。在绝大数情况下,TCP 连接都是先关闭一个方向,此时另外...原创 2020-02-10 21:15:01 · 292 阅读 · 1 评论 -
Linux网络编程 - TIME_WAIT
1. TIME_WAIT 发生场景让我们先从一例线上故障说起。在一次升级线上应用服务之后,我们发现该服务的可用性变得时好时坏,一段时间可以对外提供服务,一段时间突然又不可以,大家都百思不得其解。运维同学登录到服务所在的主机上,使用 netstat 命令查看后才发现,主机上有成千上万处于 TIME_WAIT 状态的连接。为什么呢?我们这个应用服务需要通过发起 TCP 连接对外提供服务。每个连...原创 2020-02-08 21:46:22 · 562 阅读 · 1 评论 -
Linux网络编程 - 使用套接字格式建立连接以及数据交互
1. 服务端准备连接的过程创建套接字:int socket(int domain, int type, int protocol)domain 就是指 PF_INET、PF_INET6 以及 PF_LOCAL 等,表示什么样的套接字。type 可用的值是:SOCK_STREAM: 表示的是字节流,对应 TCP;SOCK_DGRAM: 表示的是数据报,对应 UDP;SO...原创 2020-02-08 18:38:37 · 537 阅读 · 1 评论 -
Linux网络编程 - 套接字和地址
1. socket 到底是什么?在网络编程,socket,中文翻译为套接字,有的时候也叫套接口。它的寓意是通过插口接入的方式,快速完成网络连接和数据收发。可以把它从想象成现实世界的电源插槽,或者早起上网需要的网络插槽,所以 socket也可以看做是对物理世界的直接映射。先上一张图,可以看看: 这张图是网络编程中,客户端和服务端工作的...原创 2020-01-20 18:19:35 · 417 阅读 · 1 评论