随笔分类 -  http&server&业务

http Server 四层 七层 udp 业务
摘要:https://cloud.tencent.com/developer/article/1150971 前言 说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼点。本文就是来说说这些头疼点的,浅谈一些TCP的疑难杂症。 阅读全文
posted @ 2020-08-26 20:57 codestacklinuxer 阅读(343) 评论(0) 推荐(0)
摘要:如何优雅的关闭关闭这个fd , 如果只是一个简单的fd 直接调用close 就行, 但是如果要是一个框架 那就接到 资源回收复用 内存泄漏等问题; 来看看 ngx 是用怎样的思路处理 事务结束动作; 每个HTTP请求都有一个引用计数,每派生出一种新的会独立向事件收集器注册事件的动作时(如ngx_ht 阅读全文
posted @ 2020-08-16 19:15 codestacklinuxer 阅读(920) 评论(0) 推荐(0)
摘要:在解析完 http 请求报文后, 需要发出响应报文, 那么ngx 框架 提供了那些通用接口呢?如果自己设计将所用的模块的响应接口合并起来 你会怎么设计呢?? 响应头过滤函数主要的用处就是处理HTTP响应的头,可以根据实际情况对于响应头进行修改或者添加删除。 响应头过滤函数先于响应体过滤函数,而且只调 阅读全文
posted @ 2020-08-16 17:31 codestacklinuxer 阅读(984) 评论(0) 推荐(0)
摘要:HTTP 处理数据包, 有的业务不需要,此时只需要将数据包文读取后丢弃, 但是ngx 为什么还要提供一个丢弃接口呢???解决了什么问题?? 对于HTTP模块而言,放弃接收包体就是简单地不处理包体了,可是对于HTTP框架而言,并不是不接收包体就可以的。因为对于客户端而言,通常会调用一些阻塞的发送方法来 阅读全文
posted @ 2020-08-16 16:55 codestacklinuxer 阅读(196) 评论(0) 推荐(0)
摘要:HTTP包体的长度有可能非常大,不同业务可能对包体读取 处理不相同, 比如waf, 也许会读取body内容或者只是读取很少的前几十字节。所以根据不同业务特性,对http body 数据包处理方式不同,nginx核心本身不会主动读取请求体,这个工作是交给请求处理阶段的模块处理,ngx 里面目前提供了接 阅读全文
posted @ 2020-08-16 13:09 codestacklinuxer 阅读(670) 评论(0) 推荐(0)
摘要:在处理完http的头部信息后 然后在 处理request-body信息ngx_http_process_request ngx_http_process_request_headers(ngx_http_process_request_header)头部行解析完毕后调用函数ngx_http_proc 阅读全文
posted @ 2020-08-11 23:03 codestacklinuxer 阅读(394) 评论(0) 推荐(0)
摘要:简要而说:accept 到连接后 根据fd 构建一个connection 由于是 http ; 重新封装为http-connection;同时设置fd的读回调; 回调函数根据是否是https/http 进行区别 ngx_http_init_connection(ngx_connection_t *c 阅读全文
posted @ 2020-08-10 21:27 codestacklinuxer 阅读(231) 评论(0) 推荐(0)
摘要:首先看下 连接池的获取以及释放 ngx_connection_t * ngx_get_connection(ngx_socket_t s, ngx_log_t *log) //从连接池中获取一个ngx_connection_t { ngx_uint_t instance; ngx_event_t * 阅读全文
posted @ 2020-08-10 00:23 codestacklinuxer 阅读(140) 评论(0) 推荐(0)
摘要:尝试获取锁,如果获取了锁,那么还要将当前监听端口全部注册到当前worker进程的epoll当中去 获取失败就需要确保此时ls-fd 没有被 epoll 监听 ngx_int_t ngx_trylock_accept_mutex(ngx_cycle_t *cycle) { if (ngx_shmtx_ 阅读全文
posted @ 2020-08-09 23:41 codestacklinuxer 阅读(241) 评论(0) 推荐(0)
摘要:static void ngx_cache_manager_process_cycle(ngx_cycle_t *cycle, void *data) { /* * Set correct process type since closing listening Unix domain socket 阅读全文
posted @ 2020-08-09 18:41 codestacklinuxer 阅读(274) 评论(0) 推荐(0)
摘要:1、connection 字段 2、accept 字段 3、user-agent 字段 4、host字段 等字段需要注意: HTTP事务的延时主要有以下:1).解析时延 DNS解析与DNS缓存 客户端首先需要根据URL确定Web服务器的IP地址和端口号,如果最近没有对URL中的主机名进行访问,通过D 阅读全文
posted @ 2020-08-05 23:04 codestacklinuxer 阅读(192) 评论(0) 推荐(0)
摘要:1、一般socket 建立链接后, 可以使用 if ((-1 == getsockname(fd, (struct sockaddr *)&dst_sa, &dst_len)) || (-1 == getpeername(fd, (struct sockaddr *)&src_sa, &src_le 阅读全文
posted @ 2020-07-29 11:23 codestacklinuxer 阅读(107) 评论(0) 推荐(0)
摘要:今天看公司代码时,发现代码里面都是使用epoll,有的备注 epoll 效率比poll 高!!! 所以就得说一说了;宏观看一看epoll 和select的实现: select原理概述 调用select时,会发生以下事情: 从用户空间拷贝fd_set到内核空间; 注册回调函数__pollwait; 遍 阅读全文
posted @ 2020-07-28 20:30 codestacklinuxer 阅读(2408) 评论(0) 推荐(2)
摘要:/* Epoll private bits inside the event mask */#define EP_PRIVATE_BITS (EPOLLWAKEUP | EPOLLONESHOT | EPOLLET | EPOLLEXCLUSIVE) 主要是看下:惊群源: 1、socket wake 阅读全文
posted @ 2020-06-03 23:55 codestacklinuxer 阅读(764) 评论(0) 推荐(0)
摘要:之前做网络设备portal 认证时 有个需求有没有做!!portal server 实现多机热备,此处涉及到网络设备做四层/五层代理。 先看看如果要是做到每个服务器认证数量一样多!!那实现负载均衡有哪些方法呢?? 轮询 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔 阅读全文
posted @ 2020-05-02 14:35 codestacklinuxer 阅读(145) 评论(0) 推荐(0)
摘要:上一篇文章写道了udp 使用reuseport 多线程编程!!! 但是有几个问题需要考虑一下: 之前hash使用sip sport dip dport为key, 很正常同一个客户端回hash到同一个socket上。。但是其中一个线程挂了呢????????????对于TCP而言,hash的不一致仅仅影 阅读全文
posted @ 2020-04-25 22:02 codestacklinuxer 阅读(255) 评论(0) 推荐(0)
摘要:在对 socket 绑定和监听前经过了以下设置 无阻塞(O_NONBLOCK) TCP 无延时(TCP_NODELAY) 可重用地址(SO_REUSEADDR) 对于 clien server需要设置: 无阻塞 server -->无延时 1、SO_REUSEADDR选项: 在服务器程序中,SO_R 阅读全文
posted @ 2020-03-29 23:01 codestacklinuxer 阅读(426) 评论(0) 推荐(0)
摘要:HTTP中头部字段说明: Accept:告诉WEB服务器自己接受什么介质类型,* /* 表示任何类型,type/ * 表示该类型下的所有子类型,type/sub-type。 Accept-Charset: 浏览器申明自己接收的字符集 Accept-Encoding: 浏览器申明自己接收的编码方法,通 阅读全文
posted @ 2020-03-02 09:51 codestacklinuxer 阅读(71) 评论(0) 推荐(0)
摘要:1、HTTP方法 GET :获取资源 ,GET 方法用来请求访问已被 URI 识别的资源 POST:传输(上传和下载)实体主体 ,POST 方法用来传输实体的主体。虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST 方法。虽说 POST的功能与 GET 很相 阅读全文
posted @ 2020-03-01 23:42 codestacklinuxer 阅读(231) 评论(0) 推荐(0)
摘要:EPOLL的LT/ET 模式下的读写 从一个非阻塞的socket上调用recv/send函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被 阅读全文
posted @ 2020-03-01 23:41 codestacklinuxer 阅读(448) 评论(0) 推荐(0)