随笔分类 - http&server&业务
http Server 四层 七层
udp 业务
摘要:首先看下 连接池的获取以及释放 ngx_connection_t * ngx_get_connection(ngx_socket_t s, ngx_log_t *log) //从连接池中获取一个ngx_connection_t { ngx_uint_t instance; ngx_event_t *
阅读全文
摘要:尝试获取锁,如果获取了锁,那么还要将当前监听端口全部注册到当前worker进程的epoll当中去 获取失败就需要确保此时ls-fd 没有被 epoll 监听 ngx_int_t ngx_trylock_accept_mutex(ngx_cycle_t *cycle) { if (ngx_shmtx_
阅读全文
摘要:static void ngx_cache_manager_process_cycle(ngx_cycle_t *cycle, void *data) { /* * Set correct process type since closing listening Unix domain socket
阅读全文
摘要:1、connection 字段 2、accept 字段 3、user-agent 字段 4、host字段 等字段需要注意: HTTP事务的延时主要有以下:1).解析时延 DNS解析与DNS缓存 客户端首先需要根据URL确定Web服务器的IP地址和端口号,如果最近没有对URL中的主机名进行访问,通过D
阅读全文
摘要:1、一般socket 建立链接后, 可以使用 if ((-1 == getsockname(fd, (struct sockaddr *)&dst_sa, &dst_len)) || (-1 == getpeername(fd, (struct sockaddr *)&src_sa, &src_le
阅读全文
摘要:今天看公司代码时,发现代码里面都是使用epoll,有的备注 epoll 效率比poll 高!!! 所以就得说一说了;宏观看一看epoll 和select的实现: select原理概述 调用select时,会发生以下事情: 从用户空间拷贝fd_set到内核空间; 注册回调函数__pollwait; 遍
阅读全文
摘要:/* Epoll private bits inside the event mask */#define EP_PRIVATE_BITS (EPOLLWAKEUP | EPOLLONESHOT | EPOLLET | EPOLLEXCLUSIVE) 主要是看下:惊群源: 1、socket wake
阅读全文
摘要:之前做网络设备portal 认证时 有个需求有没有做!!portal server 实现多机热备,此处涉及到网络设备做四层/五层代理。 先看看如果要是做到每个服务器认证数量一样多!!那实现负载均衡有哪些方法呢?? 轮询 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔
阅读全文
摘要:上一篇文章写道了udp 使用reuseport 多线程编程!!! 但是有几个问题需要考虑一下: 之前hash使用sip sport dip dport为key, 很正常同一个客户端回hash到同一个socket上。。但是其中一个线程挂了呢????????????对于TCP而言,hash的不一致仅仅影
阅读全文
摘要:在对 socket 绑定和监听前经过了以下设置 无阻塞(O_NONBLOCK) TCP 无延时(TCP_NODELAY) 可重用地址(SO_REUSEADDR) 对于 clien server需要设置: 无阻塞 server -->无延时 1、SO_REUSEADDR选项: 在服务器程序中,SO_R
阅读全文
摘要:HTTP中头部字段说明: Accept:告诉WEB服务器自己接受什么介质类型,* /* 表示任何类型,type/ * 表示该类型下的所有子类型,type/sub-type。 Accept-Charset: 浏览器申明自己接收的字符集 Accept-Encoding: 浏览器申明自己接收的编码方法,通
阅读全文
摘要:1、HTTP方法 GET :获取资源 ,GET 方法用来请求访问已被 URI 识别的资源 POST:传输(上传和下载)实体主体 ,POST 方法用来传输实体的主体。虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST 方法。虽说 POST的功能与 GET 很相
阅读全文
摘要:EPOLL的LT/ET 模式下的读写 从一个非阻塞的socket上调用recv/send函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被
阅读全文
摘要:
阅读全文
摘要:upstream直接转发响应时的具体处理流程,主要是上面subrequest_memory为1的场景,此时该请求属于一个子请求。分析默认的input_filter的处理方法,如果读取包头时同时读到了包体信息,会调用input_filter方法处理: /* 将u->buffer.last - u->b
阅读全文
摘要:Nginx访问上游服务器的流程大致分以下几个阶段:启动upstream、连接上游服务器、向上游发送请求、接收上游响应(包头/包体)、结束请求。 upstream相关的两个重要数据结构ngx_http_upstream_t和ngx_http_upstream_conf_t /* upstream有3种
阅读全文
摘要:ngx_http_process_request如果设置了定时器则删除,既然所有的请求已经接收完毕,就不会再发生超时了 重设连接的读写回调函数 重设请求读事件回调函数 调用 ngx_http_handler 处理 HTTP 请求的 11 个阶段 调用 ngx_http_run_posted_requ
阅读全文
摘要:HTTP 请求行正确处理完成后,针对 HTTP/1.0 及以上版本紧接着要做的就是请求 HEADER 的处理与解析了 /** * 用于处理http的header数据 * 请求头: * Host: localhost * User-Agent: Mozilla/5.0 (Windows NT 5.1;
阅读全文
摘要:在 ngx_http_wait_request_handler 的最后调用了 ngx_http_process_request_line 函数用来处理和解析这次请求的全文 在读事件被触发时,内核套接字缓冲区的大小未必足够接收到全部的HTTP请求行;所以可能多次调用ngx_http_process_r
阅读全文