网络概念和常见问题
反向代理:相对于代理将多个请求发送到一个服务器,反向代理是把一个请求转发到多个服务器中的一个,或多个服务器返回给这个代理
pipleline: 流水线,一系列请求可以连续发送,不需要等待response
socks4/5: 代理服务协议,监听端口1080,TCP 连接到该端口后,新开一个代理TCP连接到目的地,socks4不支持UDP,socks5支持UDP
TCP隧道:一种服务,监听某个端口,主机上多个TCP与之连接,其用一个TCP连接到外部服务器后,数据最终都走这个TCP连接,此为TCP tunnel
线程安全:一个对象,通过它的接口,被不同的线程访问,它的内部数据一致性不会被破坏,最终的结果只与操作的次序有关
线程安全2:一个对象,它的接口只允许在某个IO线程中调用,在其他线程调用是被禁止,那也不是线程安全
高并发:短时间内有大量的请求需要处理,此时不适合阻塞处理,不适合大量创建线程或进程,只能用IO复用,异步非阻塞,reactor模型
松耦合:反过来就是耦合太紧,一个操作如果需要记住在这个操作之前的很多状态并作出不同的反应,那这个操作就和其他操作耦合太紧了
生命期控制:如果A的生命期由B控制,那么A不能脱离B存在,B创建之后才能有A,B销毁的话A也必须已经销毁,例子(A:Acceptor, B:TCPServer)
生命期模糊:如果A被用户和当前创建者同时使用,创建者即使认为应该销毁A也不应立刻销毁,因为用户可能正持有A的引用,此时用智能指针管理A最好
长短生命期:有些对象生命期和程序一样长,他可以作为main的栈上成员或全局变量,有些对象是短命的,例子(A:TCPServer B:TcpConnection)
单向依赖: A不知道B的存在,只有B知道A的存在,例子(A:Acceptor, B:TCPServer)
网络参数
缓冲区,队列长度: 意味着什么:大量的请求可能在(一个请求的处理时间内)进来了,以1min 3min内的处理能力作为一个基准的长度。A。如果过长,内存消耗较大,两种情况,1)如果是持续压力,那么每次请求的等待时间由缓冲的长度决定,响应时间会太长,用户希望知道的是要么失败,要么重传,不会启动错误处理机制,比如说不知道你的服务器是不是宕机了,不利于debug 2)如果是瞬间压力,可以很好地消化这种抖动,对于服务器来说是持续稳定输出。 B。如果过低,1)那么不能装入的几率增加,重传将消耗带宽
重传Timer:需要重传的情况下,重传timer设置为一个请求在服务器端被处理的时间,并且这个timer应该是逐渐增大的,下一次timeout要等更长时间,因为第二次timeout说明被空出来的很快又被请求填满了
处理时间,等待时间:等待时间 = 处理时间 * 等待的请求的个数