epoll服务器反应堆模型
怎么处理epoll的事件?基于reactor反应堆模型,基于事件进行处理,不要基于fd去做判断,基于事件处理的代码逻辑更加清晰!做到百万并发并没有那么难!
怎么处理epoll的事件?基于reactor反应堆模型,基于事件进行处理,不要基于fd去做判断,基于事件处理的代码逻辑更加清晰!做到百万并发并没有那么难!
tcp和udp怎么用来进行服务器开发?kill的过程发生了什么?io多路复用的内核源码剖析!
/proc/sys/net/ipv4/tcp_mem
确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP可以增大这些值(注意,其单位是内存页而不是字节)。
tcp_mem(3个INTEGER变量):low, pressure, high
1 | static void tcp_init_mem(void) |
sndbuf是根据什么定的?业务
在实际的过程中发送数据和接收数据量比较大,可以设置socket缓冲区,而避免了send()、recv()不断的循环收发。
参考:http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf
AddPortMapping()
NAT
upnp流程
最多进行4层映射,第一层路由通过/proc/net/route获取本地网关,也就是route -n的功能,第一层映射成功后,可以根据GetExternalIPAddress获得该层路由出口ip,如果出口ip为内网ip,说明还有多层路由,traceroute可以跟踪路由信息,如traceroute -m 4 -w 1 -q 2 www.baidu.com,设置为各层路由的网关,使用出口ip作为NewInternalClient,发送upnp映射请求给各层路由的网关,尝试多层映射。
1 | 1. 设备 A 向多播地址发送信息(例如,发送到组播地址 X.X.X.X)。 |
1 | #define UPNP_MULTICAST "239.255.255.250" |
安全不足和性能不高。
HTTP/2 借用了哈夫曼编码对于Header进行高效压缩,提高传输效率。
HTTP1.X中最大的问题是队头阻塞,HTTP1.X中浏览器对于同一域名的并发连接访问此时是有限的,所以常常会导致只有个位数的连接可以正常工作,后续的连接都会被阻塞。
HTTP1.1支持请求管道化(pipelining)。基于HTTP1.1的长连接,使得请求管线化成为可能。管线化使得请求能够“并行”传输。
注意:这里的“并行”并不是真正意义上的并行传输,需要注意的是,服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。
也就是说,HTTP管道化可以让我们把先进先出队列从客户端(请求队列)迁移到服务端(响应队列)。
HTTP/2 解决队头阻塞是以 HTTP1.X 管道化的为基础拓展,它使用了二进制流和帧概念解决应用层队头阻塞。应用层的阻塞被解决便是实现流并发传输。
为了控制资源的资源的获取顺序,HTTP在并发传输的基础上实现请求优先级以及流量控制,流的流量控制是考虑接收方是否具备接收能力。
二进制帧保留Header+Body传输结构,但是打散了内部的传输格式,把内容拆分为二进制帧的格式,HTTP/2把报文的基本传输单位叫做帧,而帧分为两个大类 HEADERS(首部) 和 DATA(消息负载),一个消息划分为两类帧传输同时采用二进制编码。
这种做法类似Chunked化整数据的方式,把Header+body等同的帧数据,同时内部通过类型判断进行标记。
费曼学习法有四个关键词:concept「概念」、teach「教授」、review「回顾」、simplify「简化」。如果你不能用简洁的语言把一个概念说明白,说明你没有真正的掌握它。
用户往任务队列里面生产任务,线程池从任务队列里面取任务进行消费,让少数线程的线程池来处理大量任务的任务队列,这就是一个生产者和消费者的模型。
nat的四种类型是什么样的?怎么通过stun来探测当前网络处于哪一种nat类型后面?