如何保证客户端和服务端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用法实现。可以参考。
不知道是否是正确的用法,如果不是请问通常会如何做
工程问题不是数学问题,没有所谓的正确答案。只要能实现需求就是可以的。