KumoKyaku/kcp

如何保证客户端和服务端conv值一致

Closed this issue · 2 comments

大佬您好..萌新有一些问题想请教一下

我的理解是客户端和服务端的conv值需要一致才能建立起kcp的”连接“,然后服务端管理N个kcp对象维护这些“连接”
但是客户端在连接到服务器之前,不知道conv应该是多少,也就不能初始化kcp,而为了让服务器的conv不会重复,只能是在服务器分配conv..

目前想到的是先进行TCP连接交换conv一致后再初始化kcp,不知道是否是正确的用法,如果不是请问通常会如何做

谢谢您抽出宝贵的时间解答

就是这么做的,记得kcp主库那边提过,先建一个tcp交换数据,tcp断开了kcp也断开

edit: 主库的 wiki

当然也有用udp实现的,连接时多加几次重传就可以了,毕竟udp丢包率比较高。都没问题

我的理解是客户端和服务端的conv值需要一致才能建立起kcp的”连接“,

是的。

然后服务端管理N个kcp对象维护这些“连接” 但是客户端在连接到服务器之前,不知道conv应该是多少,也就不能初始化kcp,

理论上是这样的,没错。

而为了让服务器的conv不会重复,只能是在服务器分配conv..

其实不使用conv区分连接对象也是可以的,conv是int值,用于区分"连接"有很多不方便的地方。
项目中可以随便设定一个固定的conv值,比如9999,所有“连接”使用同一个固定值也是可以的。
其实我并不赞同使用conv作为识别key或者密钥的做法。
存在安全风险,因为可以被第三方碰撞攻击。虽然可能并没有黑客去攻击。

目前想到的是先进行TCP连接交换conv一致后再初始化kcp,

完全可以,使用UDP可以性能更好一点。
https://github.com/KumoKyaku/Megumin.Net 这里有完整的Kcp用法实现。可以参考。

不知道是否是正确的用法,如果不是请问通常会如何做

工程问题不是数学问题,没有所谓的正确答案。只要能实现需求就是可以的。