diff --git a/README.md b/README.md index 7e6de5d..0e51517 100644 --- a/README.md +++ b/README.md @@ -213,15 +213,6 @@ vcpkg中的kcp库由Microsoft团队成员和社区贡献者保持最新状态。 - [Kcp a new low latency secure network stack](https://improbable.io/blog/kcp-a-new-low-latency-secure-network-stack) -# 关于作者 - -我叫林伟,笔名韦易笑,写程序很多年,喜欢研究解决程序中的一些瓶颈问题,早年喜欢游戏开发,照着《VGA编程》来做游戏图形,读 Michael Abrash 的《图形程序开发人员指南》做软渲染器,喜欢摆弄一些能够榨干 CPU 能够运行更快的代码,参加工作后,兴趣转移到服务端和网络相关的技术。 - -2007 年时做了几个传统游戏后开始研究快速动作游戏的同步问题,期间写过不少文章,算是国内比较早研究同步问题的人,然而发现不管怎么解决同步都需要在网络传输方面有所突破,后来离开游戏转行互联网后也发现不少领域有这方面的需求,于是开始花时间在网络传输这个领域上,尝试基于 UDP 实现一些保守的可靠协议,反照 BSD Lite 4.4 的代码实现一些类 TCP 协议,觉得比较有意思,又接着实现一些 P2P 和动态路由网相关的玩具。KCP 协议诞生于 2011 年,基本算是自己传输方面做的几个玩具中的一个。 - -Kcptun 的作者 xtaci 是我的大学同学,我俩都是学通信的,经常在一起研究如何进行传输优化。 - -喜欢本项目欢迎关注我的:[twitter](https://twitter.com/skywind3000) 和 [zhihu](https://www.zhihu.com/people/skywind3000)。 # 关于协议 @@ -234,6 +225,18 @@ Kcptun 的作者 xtaci 是我的大学同学,我俩都是学通信的,经常 For more information, please see the [Success Stories](https://github.com/skywind3000/kcp/wiki/Success-Stories). +# 关于作者 + +作者:林伟 (skywind3000) + +欢迎关注我的:[twitter](https://twitter.com/skywind3000) 和 [zhihu](https://www.zhihu.com/people/skywind3000)。 + +我在多年的开发经历中,一直都喜欢研究解决程序中的一些瓶颈问题,早年喜欢游戏开发,照着《VGA编程》来做游戏图形,读 Michael Abrash 的《图形程序开发人员指南》做软渲染器,爱好摆弄一些能够榨干 CPU 能够运行更快的代码,参加工作后,兴趣转移到服务端和网络相关的技术。 + +2007 年时做了几个传统游戏后开始研究快速动作游戏的同步问题,期间写过不少文章,算是国内比较早研究同步问题的人,然而发现不管怎么解决同步都需要在网络传输方面有所突破,后来离开游戏转行互联网后也发现不少领域有这方面的需求,于是开始花时间在网络传输这个领域上,尝试基于 UDP 实现一些保守的可靠协议,反照 BSD Lite 4.4 的代码实现一些类 TCP 协议,觉得比较有意思,又接着实现一些 P2P 和动态路由网相关的玩具。KCP 协议诞生于 2011 年,基本算是自己传输方面做的几个玩具中的一个。 + +Kcptun 的作者 xtaci 是我的大学同学,我俩都是学通信的,经常在一起研究如何进行传输优化。 + # 欢迎捐赠 ![欢迎使用支付宝对该项目进行捐赠](images/donation.png) diff --git a/benchmark.png b/benchmark.png new file mode 100644 index 0000000..afc926b Binary files /dev/null and b/benchmark.png differ diff --git a/ikcp.c b/ikcp.c index 29e01f0..a96a9ee 100644 --- a/ikcp.c +++ b/ikcp.c @@ -882,7 +882,11 @@ int ikcp_input(ikcpcb *kcp, const char *data, long size) if (kcp->incr < mss) kcp->incr = mss; kcp->incr += (mss * mss) / kcp->incr + (mss / 16); if ((kcp->cwnd + 1) * mss <= kcp->incr) { + #if 1 + kcp->cwnd = (kcp->incr + mss - 1) / ((mss > 0)? mss : 1); + #else kcp->cwnd++; + #endif } } if (kcp->cwnd > kcp->rmt_wnd) {