#网络编程
第三章:粘包和反序列化
本节介绍高性能网络编程中必须面临且要解决的问题,建议细致阅读,若有表述错误,欢迎指正,这里面有太多逻辑上的分析了
第二章:同步和异步
异步编程是实现高性能服务器的基础,但要解决的困难和代码的复杂度就高很多,后续所有内容都是基于异步编程展开
第一章:Asio 建立网络连接基本 API
只涉及让客户端和服务端建立连接,数据通信会在第二章讲解,即同步和异步两种方式
不要用 TIME-WAIT暗杀来关闭一条连接
不幸的时,TIME-WAIT 状态可以被提前终止,这被称为 TIME-WAIT 暗杀。它可能时“碰巧”产生的,也可能是故意造成的。不管是哪种情况,提前终止 TIME-WAIT 状态 都是不明智的
使用前将结构sockaddr_in清零
因为必须要将 sin_zero 清零,所以在使用之前,将整个地址结构清零就成了一种惯常的做法。通过这种方式,可以清除所有其它字段,而且还可以避免于未正式说明的字段及用法发送可能的冲突
不要低估 TCP 的性能
我们预计,应用程序中仅包含简单的请求/应答会话时,UDP 的性能会比 TCP 好,当连接持续的时间很长,并且传输了大量数据时,TCP 的性能会比 UDP 好得多。实际情况中,还需要各写一份代码进行测试
高并发、高可用和高性能
通过此文弄清楚网络中常见的高并发、高可用和高性能的概念
水平触发和边缘触发
很多时候你没有理解水平触发和边缘触发的区别,那是没有具体实践导致的,本文通过实际的现象和解释来讲清楚二者的区别
网络编程中结构体的区分
sockaddr 结构体是为了统一地址结构的表示方法,统一接口函数,但是这个结构体并不方便使用,因此定义了等价的 sockaddr_in 结构体,它的大小和 sockaddr 结构体相同,可以强制转换成 sockaddr。因此,在实际的网络编程中,先定义 sockaddr_in结构体把相关信息存储之后,再强制转换成 sockaddr,毕竟提供的API接受的类型是 sockaddr
主机字节序和网络字节序
在网络编程中,数据收发的过程中有自动转换机制,不需要程序员手动转换,只有向 sockadd_in 结构体成员变量填充数据时,才需要考虑字节序的问题