【日志】一段话理清楚传输层tcp和应用层http关系
前言
本博文主要是基于对tcp和http的的学习,进行的相关整理与记录,方便后续查阅。
日志
1、TCP传输层协议
TCP是一种面向连接的、可靠的、基于IP的传输层协议。TCP传输层协议一个重要特点是TCP是基于数据流的,客户端的请求会源源不断的发送给服务端,服务端收到的数据可能不是一个完整的请求,也有可能是多个请求连在一起。这就需要我们在这源源不断的数据流中区分每个请求的边界。而应用层协议主要是为请求边界定义一套规则,避免请求数据混乱。
2、应用层协议
应用层协议(application layer protocol)定义了运行在不同端系统上(客户端、服务端)的应用程序进程如何相互传递报文,例如HTTP、WebSocket都属于应用层协议。例如一个简单的应用层次协议可以如下{“module”:“user”,“action”:“getInfo”,“uid”:456}\n"。此协议是以"\n"(注意这里"\n"代表的是回车)标记请求结束,消息体是字符串。
3、短连接
短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。像WEB网站的HTTP服务一般都用短连接。
4、长连接
长连接,指在一个连接上可以连续发送多个数据包。
注意:长连接应用必须加心跳,否则连接可能由于长时间不活跃而被路由节点防火墙断开。
长连接多用于操作频繁,点对点的通讯的情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多。所以长连接在每个操作完后都不断开,下次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
资料参考
日志记录就先到这!接下来,是一些整理的c++要点概要!
额外补充
函数重载
C++函数重载的判断依据
- 函数形参的个数;
- 函数形参的类型;
- 形参的顺序;
- 不能把返回值作为函数重载的条件, 原因是编译器在编译时不会去判断函数的返回类型,
函数只有调用后, 编译器才会去验证返回类型, 所以返回值不能作为函数重载的依据; - 常函数 const 可以作为函数重载判断依据, 原因: 重载[]运算符时, 有没有 const 的区别
是: 有 const 只读, 没有 const 读写都可以。
fork()系统调用的特性
fork()系统调用是 Unix 下以自身进程创建子进程的系统调用, 一次调用, 两次返回, 如果返
回是 0, 则是子进程, 如果返回值>0, 则是父进程(返回值是子进程的 pid) 。 还有一个很
重要的东西是, 在 fork()的调用处, 整个父进程空间会原模原样地复制到子进程中, 包括指
令, 变量值, 程序调用栈, 环境变量, 缓冲区, 等等。
指针与const
- const A * 等价 A const * 。
- 允许用 A * 赋值 A const * 。
- 允许用 A* * 赋值 A const* const * 。
- 不允许用 A* * 赋值 A const* * 。
友元关系
友元关系是单向的, 不是对称, 不能传递。
- 关于传递性, 有人比喻: 父亲的朋友不一定是儿子的朋友。
- 那关于对称性, 是不是: 他把她当朋友, 她却不把他当朋友? 如, 类 A 是类B 的友元, 类 C 是类 A 的公有派生类。 则类 C 不是类 B 的友元, 类 B 不是类 A 的友元
复杂度
- vector 插入 ,该位置插入后后面的都要改变 O(n)
- Set 底层红黑树 O(logn)
- Hash_map 底层哈希表 O(1)
- Deque 尾部可以直接修改 O(1)
抽象类的规定
- 抽象类只能用作其他类的基类, 不能建立抽象类对象。
- 抽象类不能用作参数类型、 函数返回类型或显式转换的类型。
- 可以定义指向抽象类的指针和引用, 此指针可以指向它的派生类, 进而实现多态性。