- raft基本原理演示请参考 http://thesecretlivesofdata.com/raft/
- go语言的raft实现 https://github.com/goraft/raft, 但是该项目早已不再维护,原作者将raft融入到etcd和influxdb(现在貌似不是了)里了,这里摘出etcd的raft实现进行研究
[原文连接: https://www.jianshu.com/p/bc3c1d6dafe8?from=singlemessage]
如果一个 TCP 连接的一端启用了 Nagle‘s Algorithm,而另一端启用了 TCP Delayed
Ack,而发送的数据包又比较小,则可能会出现这样的情况:发送端在等 待接收端对上
一个packet 的 Ack 才发送当前的 packet,而接收端则正好延迟了 此 Ack 的发送,那么
这个正要被发送的 packet 就会同样被延迟。当然 Delayed Ack 是有个超时机制的,而默
认的超时正好就是40ms。
[原文链接:https://blog.csdn.net/hacker00011000/article/details/53910367]
Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的
网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,socket在各大主流OS平台上都得到了很好的支持。关于tcp programming,最好的资料莫过于W. Richard Stevens 的网络编程圣经《UNIX网络 编程 卷1:套接字联网API》 了,书中关于tcp socket接口的各种使用、行为模式、异常处理讲解的十分细致。Go是自带runtime的跨平台编程语言,Go中暴露给语言使用者的tcp socket api是建立OS原生tcp socket接口之上的。由于Go runtime调度的需要,golang tcp socket接口在行为特点与异常处理方面与OS原生接口有着一些差别。这篇博文的目标就是整理出关于Go tcp socket在各个场景下的使用方法、行为特点以及注意事项
1 |
typedef struct redisDb { |