消息发送失败重发如何实现啊?和大文件断点续传怎么实现啊?

phpworker2

消息发送失败重发如何实现啊?如何判断消息发送失败?和大文件断点续传怎么实现啊?

5870 1 0
1个回答

walkor

消息失败重发
如果要精确判断每个消息是否发送到客户端,服务端可以将每条消息都存储起来(mysql等),并且设置个是否已读字段。客户端收到消息后返回一个确认包给服务端,服务端把对应消息在存储中置为已读。

如果链接断开,服务端会触发onClose,这时读取存储看下对应客户端的消息数据中是否有未确认的消息,有的话就是有消息发送失败,没有就是全部发送成功。

失败的消息可以在客户端重新连接服务端时(登录权限验证时)从存储中读取出来,重新发给客户端。

注意
TCP的有保证TCP数据包按照发送顺序到达对端的机制,所以在同一个链接上重发数据一般说是没有意义的。
例如在链接1上发送数据A,假如客户端没收到,服务端在链接1上又重发了一次数据A,假如第一次发送的A没收到,那么第二次发送的数据A也一定收不到。

断点续传
有多种实现方法。比如客户端告诉服务端文件md5是什么以及这个数据有多大,服务端将客户端上传的数据保存到本地文件(md5命名)。如果上传过程中链接断开,下次客户端上传的时候仍然发送文件md5,服务端找到本地磁盘对应的文件,获得当前磁盘文件大小发给客户端,客户端就知道服务端接收了多大的数据,然后客户端将文件偏移对应的位置的数据发送过来即可。

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