workerman 中udp的问题

NNba

场景:

使用workerman做udp服务器,两个人操作绘图需要同步,需要断线重连,需要回放,快进等操作,看文档说udp比较适合。自己查找了资料,看的有点懵逼不太了解

疑问:

一 、 udp的校验和

 我看一些文章udp在ip层内已经做过校验和了,那么是不是在构建通信数据的时候就不需要做校验和这一步操作了?

二 、 udp的发送报文形式

udp是报文发送的,那么是不是就是我的每个sendto操作都是一个报文发送,客户端都需要接受一次,不需要像数据流那样规定包头来获取数据的长度?(之前写一个TCP 的项目)
 udp构建JSON数据后转十六进制数据,为什么要这样操作呢?(有大神的请详解下或者给个讲解链接,万分感谢)
 大小端问题:php的bin2hex转16进制是大端转换,解析也是unpack('H*',$data)解析,那么要求客户端构建数据后使用16进制大端发送就行了是吧?

三 、 udp的重发机制

udp是无顺序的且会丢失数据的,我构思的是在udp发送需要时,如果客户端收到的是有缺失帧序号的那么就发送信息到服务器,要求服务器重新发送这一帧的数据。我想要的补帧服务使用tcp服务,服务端启动两个服务,一个udp做帧同步,一个tcp服务做补帧服务(不会丢失),这样做可以么?会不会有什么问题?其他人都是如何做的?
2716 1 0
1个回答

walkor

一、不需要校验
二、UDP不需在数据包头设定长度。json都是明文,不需要转16进制,json数据不会有大小端问题。大小端只有在以字节传输数字时才需要考虑。
三、可以这样做。

udp适合数据可以丢失的应用,如果你的数据帧不能丢失,又补了一层tcp,感觉不如直接tcp做。

  • NNba 2020-12-31

    需要做帧同步,用TCP做帧同步么?

  • walkor 2020-12-31

    不用udp,直接tcp,不需要考虑帧丢失。

年代过于久远,无法发表回答
🔝