add example

Linwei 2015-11-27 17:51:59 +08:00
parent ee2b54e02d
commit 9a7e79c9a6

@ -1,5 +1,13 @@
在使用 KCP时你可以用在你 TCP的基础上再登陆时服务端返回 UDP端口和密钥客户端通过 TCP收到以后向服务端的 UDP端口每隔一秒重复发送包含握手信息直到服务端返回成功或者失败。服务端通过 UDP传上来的密钥得知该客户端 sockaddr对应的 TCP连接这样就建立 TCP连接到 UDP连接的映射关系。为了保持连接和 NAT出口映射客户端一般需要每 60秒就发送一个 UDP心跳服务端收到后回复客户端再在这个 UDP连接的基础上增加调用 KCP的逻辑实现快速可靠传输这样一套 TCP/UDP两用的传输系统就建立了。
可以参考下述例子:
> 1. 客户端链接tcp
> 2. 登录后服务端给客户端发送udp握手信息包括自己的udp端口用户的tcp标识id32位随机数key
> 3. 客户端给服务端udp地址发送握手信息把刚才服务端发过来的(id, key) 发送给服务端。
> 4. 服务端确认udp握手并且记录该用户udp远端地址
> 5. 以后客户端和服务端udp通信每个包都包含id, key
> 6. 服务端用客户端发上来的idkey确认用户身份并对比远端地址confirm是一个合法用户。
注意:为了保持 NAT映射关系UDP需要每隔 60秒就像服务器 ping一次。同时为了防止出口地址改变NAT映射改变或者移动设备切换基站可以使用重连或者UDP重绑定但是在 3G,2G,EDGE下面出口改变TCP也就断了所以简单重连也没问题
中国的网络情况比较特殊,会存在有些网络 UDP连接不上的情况因此都是先连接 TCP然后试图 UDPUDP不通的情况下退回 TCP也能正常游戏一旦 TCP断开则认为 UDP也断开了。