服务端编程
Tattoo_Welkin
Just do it !!!
展开
-
回射服务器-select的使用 01 (阻塞)
1. 经典“入门级”问题:IO 多路复用是什么意思? 在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流. 发明它的原因,是尽量多的提高服务器的吞吐能力。是不是听起来好拗口,看个图就懂了.(其实就是一个时分复用)在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流 那么,“一个请求到来了,nginx使用epoll接收请求的过程是怎样的”,...原创 2018-08-17 21:00:21 · 406 阅读 · 0 评论 -
Linux 下 Epoll 源码深入解读
Epoll 概述epoll是linux中IO多路复用的一种机制,I / O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。当然linux中IO多路复用不仅仅是epoll,其他多路复用机制还有select、poll,但是接下来介绍epoll的内核实现。 网上关于epoll接口的介绍非常多,这个不是我关注的重点,但是...转载 2019-02-26 23:14:20 · 1625 阅读 · 3 评论 -
服务端编程系统常用分析工具(持续更新...)
对于程序员来说,整个计算机系统由四个重要的模块组成,分别是:CPU,网络,磁盘,内存。在我们的程序或者系统出现问题时,我们应该分别有一定先后顺序的对这四块进行排查。而在Linux系统下,有很多高效的工具,可以帮助我们分析定位问题.以下分门别类来介绍一下,主要参考了下列文章:Linux下常用系统分析工具总结1.CPUtop,strace,perf,vmstat1.1 toptop...原创 2019-03-07 08:52:33 · 947 阅读 · 1 评论 -
【性能篇】多路复用之 Select,Poll,Epoll 的差异与选择
文章目录Selectselect 缺点:什么时候还需要使用select:PollPoll优点:Poll缺点:什么时候应该选择使用Poll:EpollEPoll的优点:EPoll的缺点:什么情况下使用EPoll:EPoll的内部实现:对 Epoll 的一些感悟:Selectselect 有一个文件描述符集合(fd_set),里面是一个整数数组,每个整数的每一位对应一个文件描述符,类似于位图!!!...翻译 2019-03-19 17:49:24 · 2090 阅读 · 0 评论 -
[ TCP ] 详解TCP与UDP
首先从网上各处找来TCP/UDP的区别的答案:OSI 和 TCP/IP 模型在传输层定义两种传输协议:TCP(或传输控制协议)和 UDP(或用户数据报协议)。UDP: UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输。事实上,该协议不能保证数据准确无误地到达目的地。UDP 在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低...转载 2019-03-13 11:12:08 · 213 阅读 · 0 评论 -
[ TCP ] 详解三次握手与四次挥手
文章目录讲述原因和过程:提问:两个主要原因:为什么需要2MSL 呐???因为:RST报文产生的三种情况:1. 访问不存在的端口/处于time_wait的端口2. 异常终止连接3. 处理半打开连接首先,这是一个每个面试官都会几乎提到的问题,那么这就问题来了,如何回答这个看似简单的问题呐?先行阅读:TCP连接的简介使用 tcpdump 工具观看TCP三次握手讲述原因和过程:原因就是:因...原创 2019-03-13 16:26:43 · 221 阅读 · 0 评论 -
协议设计与HTTP协议
文章目录记住,TCP是一种流协议常见的协议格式便于解包的协议设计方法详解 Http 协议HTTP请求请求方法:短连接过程HTTP响应Content-Type: text/plainContent-Length 字段Content-Encoding 字段set-Cookie 字段http状态码http/1.0,http/1.1,http/2.0 的区别HTTP1.0 HTTP 1.1主要区别HTT...原创 2019-03-13 19:40:31 · 1845 阅读 · 0 评论 -
阻塞-非阻塞-异步-同步-的理解
文章目录1. 同步与异步2. 阻塞与非阻塞1. 同步与异步同步和异步关注的是消息通信机制所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,...原创 2019-07-20 16:51:06 · 293 阅读 · 0 评论 -
高性能服务器程序框架
文章目录1. 服务器模型C/S模型P2P 模型2. 服务器编程框架对于一个服务器而言,主要有如下三部分构成:I/O处理单元。主要有四种I/O模型和两种高效的事件处理模式。逻辑单元。主要有两种高效的并发模式。存储单元。1. 服务器模型C/S模型服务端创建一个或者多个监听socket->bind->listen客户端 connect。由于客户连接请求是随机到达的异步...原创 2019-07-28 20:15:24 · 429 阅读 · 0 评论 -
muduo的事件处理(Reactor模型关键结构)
首先,看一个简单的例子:#include "Channel.h"#include "EventLoop.h"#include <stdio.h>#include <sys/timerfd.h>muduo::EventLoop *g_loop;void timeout()原创 2019-01-27 13:54:18 · 641 阅读 · 0 评论 -
你以为你以为的只是你以为的
昨晚写了这样的一个程序,目地是用来测试connect超时连接.代码如下: 客户端#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>原创 2019-01-08 11:00:53 · 484 阅读 · 0 评论 -
高性能定时器概述(包含时间堆的实现)
网络编程处理的事件主要有I/O,信号和定时器!!! timer.h (client_data类和定时器类的实现)#ifndef _TIMER_H#define _TIMER_H#include <time.h>#include &am原创 2019-01-06 22:08:12 · 1753 阅读 · 0 评论 -
为套接字设置超时
1.调用alarm,它在指定超时期满时将产生SIGALRM信号。2. 使用select为函数设置超时3.使用SO_RCVTIMEO套接字选项为函数设置超时(1.1).使用 SIGALRM 信号为 connect设置超时static void connect_alarm(int);intconnect_timeo(int sockfd, const SA *saptr,...原创 2018-08-17 22:38:16 · 2072 阅读 · 0 评论 -
sendmsg 和 recvmsg 函数
1. 基础介绍 最通用的I/O函数,只要设置好参数,read、readv、recv、recvfrom和write、writev、send、sendto等函数都可以对应换成这两个函数来调用。同时,各种输出函数调用也可以替换成sendmsg调用。#include <sys/socket.h>ssize_t recvmsg(int sockfd, struct msghdr *m...原创 2018-08-22 20:28:00 · 10973 阅读 · 1 评论 -
C语言安利一波函数封装
最近学弟学妹们在写聊天室,期间遇到了很多问题,也“逼迫”我们这些大二(其实即将大三)狗考虑了许多以前没有考虑过的东西。现在就着我们小组的聊天室的项目,送给学弟学妹们”几个可能安全的封装函数。“frist : 保证发送“len”字节到套接字ssize_t Sendlen(int fd, const void *buf, size_t len, int flags){ ss...原创 2018-08-23 16:45:01 · 3737 阅读 · 3 评论 -
非阻塞 Connect
1.什么是非阻塞的 Connect ?2.有什么用?可以让三路握手的处理等同与一般数据的处理,而不是一直让 connect一直尝试重连或者花费一个RTT时间。而且RTT时间从几毫秒到几秒不等,万一有许多连接,不论是尝试重连还是花费一个RTT时间,都将是致命的延时。可以使用该技术同时建立多个连接。Web浏览器中常用。既然使用select等待连接的建立,我们就可以质地不嗯一个时间限制,使...原创 2018-09-08 23:33:35 · 263 阅读 · 0 评论 -
使用带外数据设置 C/S 心跳机制
心跳机制的产生就是为了解决原创 2018-09-23 15:31:39 · 705 阅读 · 0 评论 -
TCP 带外数据(即紧急模式的发送和接受)
首先给出OSI 参考模型与TCP/IP协议模型图:如上图所示,我们的 TCP 位于传输层,下面还有互联网层(主要是IP)与网卡等 。相信学过网络编程的都知道,对于报文的处理,在经过每一层时都会有添加头部和解析头部的操作。如下所示:在这里,自然,我们只关心的是TCP包的首部首部之后就是用户数据 ,再来一次图:在这里,我们只关心以下两个部分:紧急字段URG:...原创 2018-09-13 17:36:24 · 10359 阅读 · 1 评论 -
UNP多线程编程技巧简单总结
1. 为新线程传递参数错误代码示例: for (i = 0; i < N; i++) { pthread_create(&tid, NULL, &handle, &i); }当当当,要提问啦!!! 以上这段代码会发生什么奇怪的事情吗?当线程去进行处理i的时候,如果cpu调度到主线程运行,就会改变i的值。因为传入的是地址,所...原创 2018-09-27 23:41:07 · 283 阅读 · 0 评论 -
Fastcgi 协议解析及 get&post 使用实例
前言:基于:csdn0娄神的描述其实看上面两位大佬的博客就已经ojbk了.写的目地主要是自己总结学习一下.基础:1.基础的 WebServer应该支持客户端请求静态文件和动态文件.2. 浏览器是不能够解析动态的php文件的!那么我们编写服务器程序时候如果遇到请求.php动态文件时就应该将php文件翻译为html文件.3. php-fpm就能够将php文件翻译为html文件.所以我们...原创 2018-12-12 22:34:11 · 2841 阅读 · 2 评论 -
从 Http 聊到 Https
文章目录http 概述HTTP的版本更迭版本更迭究竟在更迭什么?http0.9http1.0http1.1http2HTTP 的下一任 HTTPS基础概念入门1. 消息摘要-Message Digest其中执行的Hash函数就是所谓的消息摘要算法。主要有如下特性:2. 数字签名3. 数字证书http的缺陷从 SSL -> TLS协议未来前景http 概述摘自维基百科:超文本传输协议(英...原创 2019-09-02 17:20:08 · 498 阅读 · 0 评论