muduo中一些注意点:
1:设置边缘或者水平出发的时候: 如果在listen 的sock 不是单独线程的情况: 边缘出发, 如果漏掉一次accept 程序则再也不会接受到新连接,可读事件也是一样的
最好的做法应该是 可读设置成水平出发,可写操作设置成边缘触发,现在epoll 还不支持。
2:muduo 的buff 前8个字节预留出来 以用来在后面在网络消息传输中需要在消息头部增加消息长度,这样可以直接增加,减少了一次消息数据的拷贝: 在需要发送的消息都是慢慢增加的字符到消息中 最后才知道最终发送消息的长度。
2:muduo 定时器实现: 1:是用优先队列 2:是用map<timestamp, timer * > 虽然是有序的 但是无法处理两个timer 一起到期的timer 是用pair<timestamp, timer>
3:时间轮 4:是用 linux 系统的自带timerid_create 加入epoll 中然后到期后的timer变成可读
3: 在网络层的缓冲中 发送缓冲区是用buff 这样可以只调用一次系统调用write() 在自己的write缓冲中使用list 挂接要发送的string,这样少了字符串拷贝 但是多了 write调用
4:如果发送的速度快于 客户端接受的速度,会造成本地缓冲区的的堆积太大,这个需要设置一个高水位处理
5:主动连接的时候 重试时间应该逐渐延长,如0.5s 1s 2s 4s 直到30s 即back-off。
6:进程意外退出 操作系统会关闭进程使用中的tcp_sock 会往对方发送FIN分节(断电之类的是不会了),尽管如此,应用层的心跳是必不可少的。