CN109062708B - 一种数据发送方法、接收方法及装置 - Google Patents

一种数据发送方法、接收方法及装置 Download PDF

Info

Publication number
CN109062708B
CN109062708B CN201810728010.5A CN201810728010A CN109062708B CN 109062708 B CN109062708 B CN 109062708B CN 201810728010 A CN201810728010 A CN 201810728010A CN 109062708 B CN109062708 B CN 109062708B
Authority
CN
China
Prior art keywords
data
fifo message
fifo
message
data block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810728010.5A
Other languages
English (en)
Other versions
CN109062708A (zh
Inventor
杨亮
张文明
陈少杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201810728010.5A priority Critical patent/CN109062708B/zh
Publication of CN109062708A publication Critical patent/CN109062708A/zh
Application granted granted Critical
Publication of CN109062708B publication Critical patent/CN109062708B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Communication Control (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开一种数据发送方法、接收方法以及装置,该数据发送方法包括:在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块;根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;若是,将所述FiFo消息的分段标识设置为0,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道;若否,将所述分段标识设置为1,并将剩余的所述数据块写入所述后续FiFo消息。可以在发送数据时,对太大的数据进行分段处理,从而减少丢包的问题。

Description

一种数据发送方法、接收方法及装置
技术领域
本发明涉及通信领域,尤其涉及一种数据发送方法、接收方法及装置。
背景技术
在Linux系统中,当利用先入先出队列(first in first out,FiFo)命名管道进行进程间的通信时,服务端和客户端均通过本地命名管道接收数据,通过远程命名管道发送数据,从而实现基于FiFo命名管道进行全双工通信。
在上述基于FiFo命名管道进行全双工通信的过程中,理想状态是,发送端发送一个FiFo消息,接收端接收一个FiFo消息,发送的FiFo消息的数量等于接收的FiFo消息的数量。然而,当发送端发送的数据太大时,由于接收端受到最大读取数值的限制,导致接收端无法一次读取到一个完整的FiFo消息,而当发送端发送的数据太小时,又可能导致接收端一次读取到多个FiFo消息。
无论发送端发送的数据太大还是太小,均容易使接收端在处理接收到的数据时,出现遗漏处理等情况,从而导致丢包,即发送端发送的FiFo消息的数量大于接收端接收到的FiFo消息的数量。
发明内容
本发明提供一种数据发送方法、接收方法及装置,可以在发送数据时,对太大的数据进行分段处理,在接收数据时,将所有接收到的数据保存到序列化容器中再进行处理,只有处理完的数据才从序列化容器中移除,确保不遗漏处理已接收到的数据,从而解决现有技术在基于FiFo命名管道进行全双工通信的过程中,容易存在的丢包问题。
第一方面,本发明实施例提供了一种数据发送方法,所述方法包括:
在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;
在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的规模小于或等于所述数据块的规模;
根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;
若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;
若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。
可选的,所述根据所述FiFo消息数据结构判断所述数据块是否已被全部包装完毕,包括:
将所述数据块的规模减去偏移量的差值设置为所述FiFo消息数据结构的参数,所述偏移量表示在使用所述FiFo消息包装所述数据块之前,所述数据块已被包装在先前FiFo消息的总规模,所述偏移量的初始值为0;
判断所述有效负载的规模是否等于所述差值;
若所述FiFo消息的有效负载的规模等于所述差值,确定所述数据块已被全部包装完毕;
若所述FiFo消息的有效负载的规模不等于所述差值,确定所述数据块未被全部包装完毕。
第二方面,本发明实施例提供了一种数据接收方法,所述方法包括:
在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;
将从所述本地命名管道中读取的数据保存到序列化容器中;
将保存到所述序列化容器中的数据转换为转换FiFo消息;
判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的规模不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的规模小于或等于所述数据块的规模;
若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;
若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据;
将与所述数据块对应的全部有效负载进行拼接得到所述数据块。
可选的,所述判断所述转换FiFo消息是否为完整的FiFo消息,包括:
调用获取规模方法获取保存在所述序列化容器中的用于生成所述转换FiFo消息的数据的规模;
判断所述用于生成所述转换FiFo消息的数据的规模是否大于或等于所述完整的FiFo消息的总规模,所述完整的FiFo消息的总规模从所述转换FiFo消息中得到;
若所述用于生成所述转换FiFo消息的数据的规模大于或等于所述完整的FiFo消息的总规模,则确定所述转换FiFo消息为所述完整的所述FiFo消息;
若所述用于生成所述转换FiFo消息的数据的规模小于所述完整的FiFo消息的总规模,则确定所述转换FiFo消息不是所述完整的FiFo消息。
第三方面,本发明实施例提供了一种数据发送装置,所述装置包括:
创建单元,用于在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;
包装单元,用于在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的规模小于或等于所述数据块的规模;
判断单元,用于根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;
写入单元,用于若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;
所述包装单元还用于若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。
可选的,所述判断单元具体用于:
将所述数据块的规模减去偏移量的差值设置为所述FiFo消息数据结构的参数,所述偏移量表示在使用所述FiFo消息包装所述数据块之前,所述数据块已被包装在先前FiFo消息的总规模,所述偏移量的初始值为0;
判断所述有效负载的规模是否等于所述差值;
若所述FiFo消息的有效负载的规模等于所述差值,确定所述数据块已被全部包装完毕;
若所述FiFo消息的有效负载的规模不等于所述差值,确定所述数据块未被全部包装完毕。
第四方面,本发明实施例提供了一种数据接收装置,所述装置包括:
读取单元,用于在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;
保存单元,用于将从所述本地命名管道中读取的数据保存到序列化容器中;
转换单元,用于将保存到所述序列化容器中的数据转换为转换FiFo消息;
判断单元,用于判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的规模不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的规模小于或等于所述数据块的规模;
获取单元,用于若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;
所述读取单元还用于若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据的操作;
拼接单元,用于将与所述数据块对应的全部有效负载进行拼接得到所述数据块。
可选的,所述判断单元具体用于:
调用获取规模方法获取保存在所述序列化容器中的用于生成所述转换FiFo消息的数据的规模;
判断所述用于生成所述转换FiFo消息的数据的规模是否大于或等于所述完整的FiFo消息的总规模,所述完整的FiFo消息的总规模从所述转换FiFo消息中得到;
若所述用于生成所述转换FiFo消息的数据的规模大于或等于所述完整的FiFo消息的总规模,则确定所述转换FiFo消息为所述完整的所述FiFo消息;
若所述用于生成所述转换FiFo消息的数据的规模小于所述完整的FiFo消息的总规模,则确定所述转换FiFo消息不是所述完整的FiFo消息。
第五方面,本发明实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述数据发送方法的所有步骤。
第六方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述数据发送方法的所有步骤。
本发明实施例提供的数据发送方法在基于FiFo命名管道进行全双工通信的过程中实现,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的规模小于或等于所述数据块的规模;根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。可以在发送数据时,对太大的数据进行分段处理,从而减少数据太大,接收端无法一次接收到完整的FiFo消息,从而导致丢包的问题。
另一方面,本发明实施例提供的数据接收方法在基于FiFo命名管道进行全双工通信的过程中实现,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;将从所述本地命名管道中读取的数据保存到序列化容器中;将保存到所述序列化容器中的数据转换为转换FiFo消息;判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的规模不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的规模小于或等于所述数据块的规模;若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据;将与所述数据块对应的全部有效负载进行拼接得到所述数据块。可以在接收数据时,将所有接收到的数据保存到序列化容器中再进行处理,只有处理完的数据才从序列化容器中移除,确保不遗漏处理已接收到的数据,从而解决在基于FiFo命名管道进行全双工通信的过程中,容易丢包的问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中数据发送方法的流程图;
图2为本发明实施例中数据接收方法的流程图;
图3为本发明实施例中数据发送装置的结构示意图;
图4为本发明实施例中数据接收装置的结构示意图;
图5为本发明实施例中电子设备的结构示意图;
图6为本发明实施例中存储介质的结构示意图。
具体实施方式
本申请实施例通过提供一种数据发送方法、接收方法及装置,可以在发送数据时,对太大的数据进行分段处理,在接收数据时,将所有接收到的数据保存到序列化容器中再进行处理,只有处理完的数据才从序列化容器中移除,确保不遗漏处理已接收到的数据,从而解决现有技术在基于FiFo命名管道进行全双工通信的过程中,容易存在的丢包问题。
在基于FiFo命名管道进行全双工通信的方法中,包括服务器和客户端,二者通过网络进行连接,以实现通信。在具体实施过程中,客户端包括但不限于移动终端设备(例如手机、平板电脑),固定终端设备(例如台式机)等,服务器可以为单独的服务器,也可以为多个服务器组成的服务器组。首先,服务器接收客户端发送的连接建立请求消息,该连接建立请求消息包括客户端的本地命名管道的标识信息,客户端的本地命名管道用于接收信息;服务器根据连接建立请求消息创建与客户端对应的FiFo会话,该FiFo会话包括服务器的本地命名管道和服务器的远程命名管道,服务器的本地命名管道用于FiFo会话接收信息,服务器的远程命名管道为在该FiFo会话中与客户端的本地命名管道对应的管道,服务器的远程命名管道用于向客户端发送信息;响应于所述连接建立请求消息,服务器通过服务器的远程命名管道向客户端发送连接建立请求响应消息,所述连接建立请求响应消息包括服务器的本地命名管道的标识信息,以使得客户端通过客户端的远程命名管道向所述FiFo会话发送信息,客户端的远程命名管道为在所述FiFo会话中与服务器的本地命名管道对应的管道。可见,在基于FiFo命名管道进行全双工通信的方法中,服务器和客户端均通过自己的本地命名管道接收数据,通过自己的远程命名管道发送数据,能够同时进行数据的发送与接收,解决了在Linux系统中利用FiFo管道只能实现进程间的半双工通信的问题。在此基础上,本实施例对于这个过程的数据发送和接收进行优化,可以在发送数据时,对太大的数据进行分段处理,在接收数据时,将所有接收到的数据保存到序列化容器中再进行处理,只有处理完的数据才从序列化容器中移除,确保不遗漏处理已接收到的数据,从而解决现有技术在基于FiFo命名管道进行全双工通信的过程中,容易存在的丢包问题。
本申请实施例中的技术方案,总体思路如下:
在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的规模小于或等于所述数据块的规模;根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。可以在发送数据时,对太大的数据进行分段处理,从而减少数据太大,接收端无法一次接收到完整的FiFo消息,从而导致丢包的问题。
另一方面,在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;将从所述本地命名管道中读取的数据保存到序列化容器中;将保存到所述序列化容器中的数据转换为转换FiFo消息;判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的规模不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的规模小于或等于所述数据块的规模;若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据;将与所述数据块对应的全部有效负载进行拼接得到所述数据块。可以在接收数据时,将所有接收到的数据保存到序列化容器中再进行处理,只有处理完的数据才从序列化容器中移除,确保不遗漏处理已接收到的数据,从而解决在基于FiFo命名管道进行全双工通信的过程中,容易丢包的问题。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例提供了一种数据发送方法,如图1所示,该方法包括:
S101、在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构。
其中,可以使用静态分配方法alloc创建FiFo消息数据结构,alloc方法是向栈申请内存,因此无需释放。另外,FiFo消息在本实施例中也被称为FiFoMessageData,FiFo消息数据结构也被称为FiFoMessageData结构,不同的名称代表相同的含义,以下不再重复说明。
应当理解,本实施例的实施主体为发送端,发送端可以是服务器,也可以是客户端,当服务器向客户端发送数据时,服务器作为发送端,而客户端作为接收端,类似的,当客户端向服务器发送数据时,客户端作为发送端,而服务器作为接收端。
S102、在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的规模小于或等于所述数据块的规模。
FiFoMessageData用于包装需要发送的数据块data,该FiFoMessageData包括size字段、payloadSize字段和payloadData字段,其中,size字段记录了FiFo消息的总规模,FiFo消息的总规模包括FiFoMessageData的结构头大小以及其携带的有效负载的规模,payloadSize字段表示FiFo消息携带的有效负载的规模,payloadData字段表示FiFo消息携带的有效负载的数据内容。
本实施例中,以第一预置数值为4096字节为例进行说明,并不用于限制本实施例。当使用所述FiFo消息包装数据块时,若FiFo消息的规模已达到4096字节时,数据块还未被全部包装完毕,则已写入FiFo消息的数据块为有效负载payloadData,有效负载的规模小于数据块的规模,若数据块已被全部包装完毕,而FiFo消息的规模未达到4096字节,则有效负载的规模等于数据块的规模。
S103、根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕。
具体的,通过增加一个偏移量offset来记录数据块的包装情况,该偏移量表示在使用当前的FiFo消息包装所述数据块之前,所述数据块已被包装在先前FiFo消息的总规模,所述偏移量的初始值为0。具体的,在FiFo消息数据结构中,包括两个参数,第一个参数是数据块的地址加上偏移量的和值data+offset,用来表示该FiFo消息中有效负载的地址,由于数据块是按照顺序写入FiFo消息的,所以有效负载的地址可以用来分辨数据块间的顺序,接收端可以根据有效负载的地址重组数据块。除此以外,也可以在每个FiFo消息中做相应的顺序标记,接收端也可以根据顺序标记重组数据块,在此不作限制。第二个参数是数据块的规模减去偏移量的差值size–offset,表示使用所述FiFo消息包装所述数据块之前,数据块还有多少剩余的数据块未被包装。
再判断FiFo消息的有效负载的规模是否等于所述差值;
若所述FiFo消息的有效负载的规模等于所述差值,表示剩余的数据块刚好写入到了当前FiFo消息,确定所述数据块已被全部包装完毕,执行步骤S104。
若所述FiFo消息的有效负载的规模不等于所述差值,表示当前的FiFo消息超过了4096字节,但还未能将数据块包装完,确定所述数据块未被全部包装完毕,执行步骤S105。
S104、将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块。
本实施例中,增加了分段标识moreSegment来确认FiFo消息后续是否还有分段的数据,若数据块已被包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,然后调用写方法write将用于包装所述数据块的全部FiFo消息写入发送端的远程命名管道,以使得接收端从接收端的本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块。其中,数据块全部写完后发送FiFo消息,可以缩短相关FiFo消息间的接收间隙,有助于接收端更好的还原数据,在一些可能的实现方式中,也可以生成一个FiFo消息就发送一个,此处不做限制。
S105、将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。
具体的,若数据块未被包装完毕,将所述分段标识设置为1,再从步骤S101开始将剩余的所述数据块写入后续的FiFo消息,直到数据块被包装完毕。
本实施例中,在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的规模小于或等于所述数据块的规模;根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。可以在发送数据时,对太大的数据进行分段处理,从而减少数据太大,接收端无法一次接收到完整的FiFo消息,从而导致丢包的问题。
基于同一发明构思,本发明实施例还提供了一种数据接收方法,见实施例二。
实施例二
本实施例提供了一种数据接收方法,如图2所示,该方法包括:
S201、在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值。
本实施例中,通过调用读方法read从所述本地命名管道中读取数据,由于read方法对于读取的数据大小有限制,所以从本地命名管道中读取的数据不能大于第二预置数值,以下以第二预置数值与发送端的第一预置数值相同,均为4096字节为例进行说明,并不用于限制本实施例。
应当理解,本实施例的实施主体为接收端,接收端可以是服务器,也可以是客户端,当服务器向客户端发送数据时,服务器作为发送端,而客户端作为接收端,类似的,当客户端向服务器发送数据时,客户端作为发送端,而服务器作为接收端。其中,客户端设备包括但不限于
S202、将从所述本地命名管道中读取的数据保存到序列化容器中。
序列化是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来的方法。本实施例中,序列化容器为类型为Serializer的序列化容器m_serializer,该序列化容器m_serializer可以保存从所述本地命名管道中读取的数据,然后再读出或删除保存的数据。
S203、将保存到所述序列化容器中的数据转换为转换FiFo消息。
具体的,可以通过关键字匹配的方法从序列化容器的数据中获取FiFo消息的相关数据,再将获取的数据按照FiFo消息的结构转换成转换FiFo消息,转换FiFo消息也可以称为转换FiFoMessageData。
在将保存到所述序列化容器中的数据转换为转换FiFo消息之前,可以先调用m_serializer序列化容器中的获取规模方法GetSize来获取序列化容器中的数据规模,从而判断序列化容器中是否存在数据,若该方法的返回值大于0,表示序列化容器中有数据。
S204、判断所述转换FiFo消息是否为完整的FiFo消息。
所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的规模不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的规模小于或等于所述数据块的规模。
而转换FiFo消息是由接收端根据接收到的数据和FiFo消息的结构生成的,由于序列化容器中保存的数据并不一定完整,所以转换FiFo消息可能是一个不完整的FiFo消息。因此需要判断所述转换FiFo消息是否为完整的FiFo消息,具体的判断方法如下:
调用m_serializer序列化容器中的获取规模方法GetSize获取保存在所述序列化容器中的用于生成所述转换FiFo消息的数据的规模;
判断所述用于生成所述转换FiFo消息的数据的规模是否大于或等于所述完整的FiFo消息的总规模,由于发送端发送的FiFo消息包括FiFo消息的总规模size字段,在将保存到所述序列化容器中的数据转换为转换FiFo消息时,已经匹配到该size字段作为转换为转换FiFo消息的数据之一,所以完整的FiFo消息的总规模可以从转换FiFo消息中得到,也可以单独再从所述序列化容器中的数据中获取得到完整的FiFo消息的总规模,在此不做限制;
若所述用于生成所述转换FiFo消息的数据的规模大于或等于所述完整的FiFo消息的总规模,则确定所述转换FiFo消息为所述完整的所述FiFo消息,执行步骤S205;
若所述用于生成所述转换FiFo消息的数据的规模小于所述完整的FiFo消息的总规模,则确定所述转换FiFo消息不是所述完整的FiFo消息,执行步骤S206。
S205、从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据。
由于用于生成所述转换FiFo消息的数据已经处理完毕,可以执行删除操作,从而,序列化容器中保存的都是未经处理完毕的数据。举个例子,可以调用序列化容器m_serializer的PopBuffer方法将大小为转换FiFo消息中size字段规模的数据从m_serializer的起始位置删除。
S206、继续执行所述调用读方法从所述本地命名管道中读取数据。
若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据,直到一个完整的FiFo消息的数据都已接收齐全,从而生成的转换FiFo消息就可以是一个完整的FiFo消息。
S207、将与所述数据块对应的全部有效负载进行拼接得到所述数据块。
若接收端已获取到数据块对应的全部有效负载,则可以将与所述数据块对应的全部有效负载进行拼接得到所述数据块,包括但不限于使用以下方法进行拼接:
第一种,假设接收端按顺序接收到数据块对应的FiFo消息,第一个FiFo消息的分段标识为1,直到接收到分段标识为0的FiFo消息,表示该数据块对应的FiFo消息已经接收齐全,由这些数据获取的有效负载可以拼接成完整的数据块。
第二种,由于数据块是按照顺序写入FiFo消息的,所以可以根据有效负载的地址对有效负载进行拼接,从而得到完整的数据块。
第三种,发送端可以在数据块对应的FiFo消息中提前设置编号,编号包括但不限于数字,字母等有先后规律的数值。例如第一个有效负载的编号设置为1,第二个有效负载的编号设置为2,以此类推,则可以根据有效负载的编号对有效负载进行拼接,从而得到完整的数据块。
本实施例中,在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;将从所述本地命名管道中读取的数据保存到序列化容器中;将保存到所述序列化容器中的数据转换为转换FiFo消息;判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的规模不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的规模小于或等于所述数据块的规模;若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据;将与所述数据块对应的全部有效负载进行拼接得到所述数据块。可以在接收数据时,将所有接收到的数据保存到序列化容器中再进行处理,只有处理完的数据才从序列化容器中移除,确保不遗漏处理已接收到的数据,从而解决在基于FiFo命名管道进行全双工通信的过程中,容易丢包的问题。
为了便于理解,以下将从应用场景的角度,对本发明实施例进行介绍。
假设客户端有一个地址为0000,大小为4000字节的数据块需要发送到服务器,每个FiFo消息的大小限制为4096字节,除去结构头的规模,每次最多只能写入3500字节的有效负载,另外,本应用场景使用第一、第二、第三来区分各个FiFo消息以及各个FiFo消息对应的参数。在发送端,客户端使用第一FiFo消息包装数据块,先创建第一FiFo消息结构,该第一FiFo消息结构的第一个参数为数据块的地址加上偏移量的和值,即为0000+0,表示有效负载的地址为0000,其中,偏移量表示在第一FiFo消息之前,数据块写入在先FiFo消息的总规模,偏移量offset的初始值为0,显然,在第一FiFo消息消息之前,数据块写入在先FiFo消息的总规模为0。该第一FiFo消息结构的第二个参数为数据块总规模减去偏移量的差值,即为4000-0,表示在此之前,数据块还剩余4000字节未写入FiFo消息。当第一FiFo消息生成后,判断数据块是否已被包装完毕,第一FiFo消息中的有效负载规模为3500字节,不等于数据块总规模减去偏移量的差值4000字节,可以确定数据块还未被包装完毕,则将第一FiFo消息的分段标识设置为1,表示后续还有用于包装数据块的FiFo消息,并将有效负载的规模3500加上偏移量的值0,即3500作为第二FiFo消息的偏移量的值。类似的,生成第二FiFo消息,其中,第二FiFo消息中的有效负载地址为0000+3500,即为3500,有效负载的规模为500字节,刚好等于数据块总规模4000减去偏移量3500的差值500字节,表示数据块已被包装完毕。则调用写方法将第一FiFo消息和第二FiFo消息写入客户端的远程命名管道。在接收端,服务器调用读方法从服务器的本地命名管道中读取数据,每次最大的读取规模为4096字节,由于在第一FiFo消息之前,还有一个大小为2096字节的第三FiFo消息,则服务器一次读到了一个大小为2096字节的第三FiFo消息,以及一个大小为2000字节的第一FiFo消息的部分数据,然后服务器将读到的4096字节的数据存到序列化容器中,对于第一FiFo消息而言,仅接收到2000字节的数据,除去结构头的规模,有效负载只有1404字节。然后使用第一FiFo消息的相关数据转换成第一转换FiFo消息,第一转换FiFo消息的规模只有2000字节,小于第一FiFo消息的规模4096字节,可以判断第一转换FiFo消息不是一个完整的FiFo消息。在服务器继续读取下一个大小为4096字节的数据,该数据中,除了包括第一FiFo消息剩余的2096字节数据,还包括第二FiFo消息的1096字节数据,以及其他FiFo消息的904字节数据,对于第一FiFo消息和第二FiFo消息而言,由于数据已齐全,生成的第一转换FiFo消息与第一FiFo消息的规模相等,生成的第二转换FiFo消息和第二FiFo消息的规模相等,则可以确定第一转换FiFo和第二转换FiFo消息为完整的FiFo消息,并从第一转换FiFo消息中获取规模为3500字节的有效负载,从第二转换FiFo消息中获取规模为500字节的有效负载,并在序列化容器中删除用于生成第一转换FiFo和第二转换FiFo消息的数据。同时,服务器根据第一转换FiFo消息的前一个转换FiFo消息的分段标识为0,第一转换FiFo消息的分段标识为1,可以确认第一转换FiFo消息与前一个转换FiFo消息不相关,而且第一转换FiFo消息还有分段的第二转换FiFo消息,再根据第二转换FiFo消息的分段标识为1,可以确定第一转换FiFo消息与第二转换FiFo消息相关,二者用于包装同一个数据块。除了根据接收数据的先后顺序,还可以进一步根据第一转换FiFo消息中有效负载的地址为0000,第二转换FiFo消息中有效负载的地址为3500,确定第一转换FiFo消息的顺序在先,第二转换FiFo消息的顺序在后,从而按照先后顺序将两个有效负载拼接为一个完整的数据块,从而利用本发明实施例的方法实现了客户端向服务器发送数据块的功能,可以在发送数据时,对太大的数据进行分段处理,在接收数据时,将所有接收到的数据保存到序列化容器中再进行处理,只有处理完的数据才从序列化容器中移除,确保不遗漏处理已接收到的数据。
基于同一发明构思,本发明实施例还提供了实施例一数据发送方法对应的装置,见实施例三。
实施例三
本实施例提供了一种数据发送装置,如图3所示,该装置包括:
创建单元301,用于在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;
包装单元302,用于在所述FiFo消息的规模不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的规模小于或等于所述数据块的规模;
判断单元303,用于根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;
写入单元304,用于若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;
所述包装单元302还用于若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。
由于本发明实施例三所介绍的装置,为实施本发明实施例一的方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。
基于同一发明构思,本发明实施例还提供了实施例二数据接收方法对应的装置,见实施例四。
实施例四
本实施例提供了一种数据接收装置,如图4所示,该装置包括:
读取单元401,用于在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;
保存单元402,用于将从所述本地命名管道中读取的数据保存到序列化容器中;
转换单元403,用于将保存到所述序列化容器中的数据转换为转换FiFo消息;
判断单元404,用于判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的规模不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的规模小于或等于所述数据块的规模;
获取单元405,用于若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;
所述读取单元401还用于若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据的操作;
拼接单元406,用于将与所述数据块对应的全部有效负载进行拼接得到所述数据块。
由于本发明实施例四所介绍的装置,为实施本发明实施例二的方法所采用的装置,故而基于本发明实施例二所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例二的方法所采用的装置都属于本发明所欲保护的范围。
基于同一发明构思,本申请提供了实施例一对应的电子设备实施例,详见实施例五。
实施例五
本实施例提供一种电子设备,如图5所示,包括存储器510、处理器520及存储在存储器510上并可在处理器520上运行的计算机程序511,处理器520执行计算机程序511时,可以实现实施例一中任一实施方式。
由于本实施例所介绍的电子设备为实施本申请实施例一中方法所采用的设备,故而基于本申请实施例一中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
基于同一发明构思,本申请提供了实施例一对应的存储介质,详见实施例六。
实施例六
本实施例提供一种计算机可读存储介质600,如图6所示,其上存储有计算机程序611,该计算机程序611被处理器执行时,可以实现实施例一中任一实施方式。
同理,对于实施例二提供的数据接收方法,同样可以提供相对应的计算机可读存储介质以及电子设备,用以实现实施例二中的方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种数据发送方法,其特征在于,所述方法包括:
在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;
在所述FiFo消息的容量不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的容量小于或等于所述数据块的容量;
根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;
若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;
若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。
2.根据权利要求1所述的方法,其特征在于,所述根据所述FiFo消息数据结构判断所述数据块是否已被全部包装完毕,包括:
将所述数据块的容量减去偏移量的差值设置为所述FiFo消息数据结构的参数,所述偏移量表示在使用所述FiFo消息包装所述数据块之前,所述数据块已被包装在先前FiFo消息的总容量,所述偏移量的初始值为0;
判断所述有效负载的容量是否等于所述差值;
若所述FiFo消息的有效负载的容量等于所述差值,确定所述数据块已被全部包装完毕;
若所述FiFo消息的有效负载的容量不等于所述差值,确定所述数据块未被全部包装完毕。
3.一种数据接收方法,其特征在于,所述方法包括:
在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;
将从所述本地命名管道中读取的数据保存到序列化容器中;
将保存到所述序列化容器中的数据转换为转换FiFo消息;
判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的容量不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的容量小于或等于所述数据块的容量;
若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;
若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据;
将与所述数据块对应的全部有效负载进行拼接得到所述数据块。
4.根据权利要求3所述的方法,所述判断所述转换FiFo消息是否为完整的FiFo消息,包括:
获取保存在所述序列化容器中的用于生成所述转换FiFo消息的数据的容量;
判断所述用于生成所述转换FiFo消息的数据的容量是否大于或等于所述完整的FiFo消息的总容量,所述完整的FiFo消息的总容量从所述转换FiFo消息中得到;
若所述用于生成所述转换FiFo消息的数据的容量大于或等于所述完整的FiFo消息的总容量,则确定所述转换FiFo消息为所述完整的所述FiFo消息;
若所述用于生成所述转换FiFo消息的数据的容量小于所述完整的FiFo消息的总容量,则确定所述转换FiFo消息不是所述完整的FiFo消息。
5.一种数据发送装置,其特征在于,所述装置包括:
创建单元,用于在基于FiFo命名管道进行全双工通信的过程中,当使用远程命名管道发送数据时,调用FiFo消息的静态分配方法创建FiFo消息数据结构;
包装单元,用于在所述FiFo消息的容量不大于第一预置数值的条件下,使用所述FiFo消息包装数据块,所述数据块中被所述FiFo消息包装的数据块称为有效负载,所述有效负载的容量小于或等于所述数据块的容量;
判断单元,用于根据所述FiFo消息的FiFo消息数据结构判断所述数据块是否已被全部包装完毕;
写入单元,用于若所述数据块已被全部包装完毕,将所述FiFo消息的分段标识设置为0,表示所述FiFo消息为包装所述数据块的最后一个FiFo消息,并调用写方法将用于包装所述数据块的全部FiFo消息写入所述远程命名管道,以使得接收端从本地命名管道获取数据后,对获取的所述数据进行处理后得到所述数据块;
所述包装单元还用于若所述数据块未被全部包装完毕,将所述分段标识设置为1,表示所述FiFo消息之后还有用于包装所述数据块的后续FiFo消息,并将剩余的所述数据块写入所述后续FiFo消息。
6.根据权利要求5所述的装置,其特征在于,所述判断单元具体用于:
将所述数据块的容量减去偏移量的差值设置为所述FiFo消息数据结构的参数,所述偏移量表示在使用所述FiFo消息包装所述数据块之前,所述数据块已被包装在先前FiFo消息的总容量,所述偏移量的初始值为0;
判断所述有效负载的容量是否等于所述差值;
若所述FiFo消息的有效负载的容量等于所述差值,确定所述数据块已被全部包装完毕;
若所述FiFo消息的有效负载的容量不等于所述差值,确定所述数据块未被全部包装完毕。
7.一种数据接收装置,其特征在于,所述装置包括:
读取单元,用于在基于FiFo命名管道进行全双工通信的过程中,当使用本地命名管道接收数据时,调用读方法从所述本地命名管道中读取数据,所述从所述本地命名管道中读取的数据不大于第二预置数值;
保存单元,用于将从所述本地命名管道中读取的数据保存到序列化容器中;
转换单元,用于将保存到所述序列化容器中的数据转换为转换FiFo消息;
判断单元,用于判断所述转换FiFo消息是否为完整的FiFo消息,所述FiFo消息用于包装数据块,所述FiFo消息包括有效负载,所述有效负载为,在所述FiFo消息的容量不大于第一预置数值的条件下,所述数据块中被所述FiFo消息包装的数据块,所述有效负载的容量小于或等于所述数据块的容量;
获取单元,用于若所述转换FiFo消息为所述完整的FiFo消息,从所述转换FiFo消息中获取所述有效负载,并在所述序列化容器中删除用于生成所述转换FiFo消息的数据;
所述读取单元还用于若所述转换FiFo消息不是所述完整的FiFo消息,继续执行所述调用读方法从所述本地命名管道中读取数据的操作;
拼接单元,用于将与所述数据块对应的全部有效负载进行拼接得到所述数据块。
8.根据权利要求7所述的装置,所述判断单元具体用于:
获取保存在所述序列化容器中的用于生成所述转换FiFo消息的数据的容量;
判断所述用于生成所述转换FiFo消息的数据的容量是否大于或等于所述完整的FiFo消息的总容量,所述完整的FiFo消息的总容量从所述转换FiFo消息中得到;
若所述用于生成所述转换FiFo消息的数据的容量大于或等于所述完整的FiFo消息的总容量,则确定所述转换FiFo消息为所述完整的所述FiFo消息;
若所述用于生成所述转换FiFo消息的数据的容量小于所述完整的FiFo消息的总容量,则确定所述转换FiFo消息不是所述完整的FiFo消息。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1或2所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1或2所述的方法。
CN201810728010.5A 2018-07-05 2018-07-05 一种数据发送方法、接收方法及装置 Active CN109062708B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810728010.5A CN109062708B (zh) 2018-07-05 2018-07-05 一种数据发送方法、接收方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810728010.5A CN109062708B (zh) 2018-07-05 2018-07-05 一种数据发送方法、接收方法及装置

Publications (2)

Publication Number Publication Date
CN109062708A CN109062708A (zh) 2018-12-21
CN109062708B true CN109062708B (zh) 2020-07-10

Family

ID=64819209

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810728010.5A Active CN109062708B (zh) 2018-07-05 2018-07-05 一种数据发送方法、接收方法及装置

Country Status (1)

Country Link
CN (1) CN109062708B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101442387A (zh) * 2008-12-22 2009-05-27 华为技术有限公司 一种数据反压的处理方法和装置
CN102916902A (zh) * 2011-08-03 2013-02-06 中兴通讯股份有限公司 数据存储方法及装置
CN104135496A (zh) * 2013-05-02 2014-11-05 华中科技大学 一种同构环境下的rpc数据传输方法及系统
CN105406999A (zh) * 2015-11-20 2016-03-16 福建星网锐捷安防科技有限公司 一对多数据分发方法和分发设备
CN106484652A (zh) * 2016-10-26 2017-03-08 郑州云海信息技术有限公司 一种基于ntb硬件的多队列通信方法及系统
CN106549845A (zh) * 2016-10-26 2017-03-29 郑州云海信息技术有限公司 一种基于ntb硬件的通信方法及系统
CN106685854A (zh) * 2016-12-09 2017-05-17 浙江大华技术股份有限公司 一种数据发送方法及系统
CN106709013A (zh) * 2016-12-26 2017-05-24 深圳市捷顺科技实业股份有限公司 数据处理方法及对应装置、数据交互方法及对应装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606889B1 (en) * 2015-09-04 2017-03-28 Dell Products L.P. Systems and methods for detecting memory faults in real-time via SMI tests

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101442387A (zh) * 2008-12-22 2009-05-27 华为技术有限公司 一种数据反压的处理方法和装置
CN102916902A (zh) * 2011-08-03 2013-02-06 中兴通讯股份有限公司 数据存储方法及装置
CN104135496A (zh) * 2013-05-02 2014-11-05 华中科技大学 一种同构环境下的rpc数据传输方法及系统
CN105406999A (zh) * 2015-11-20 2016-03-16 福建星网锐捷安防科技有限公司 一对多数据分发方法和分发设备
CN106484652A (zh) * 2016-10-26 2017-03-08 郑州云海信息技术有限公司 一种基于ntb硬件的多队列通信方法及系统
CN106549845A (zh) * 2016-10-26 2017-03-29 郑州云海信息技术有限公司 一种基于ntb硬件的通信方法及系统
CN106685854A (zh) * 2016-12-09 2017-05-17 浙江大华技术股份有限公司 一种数据发送方法及系统
CN106709013A (zh) * 2016-12-26 2017-05-24 深圳市捷顺科技实业股份有限公司 数据处理方法及对应装置、数据交互方法及对应装置

Also Published As

Publication number Publication date
CN109062708A (zh) 2018-12-21

Similar Documents

Publication Publication Date Title
CN112488688B (zh) 基于区块链的交易处理方法、装置、设备及存储介质
CN103701867A (zh) 一种处理调用请求的方法、系统及中心服务器
CN108829526B (zh) 一种进程间通信方法、电子设备及可读存储介质
CN107589990A (zh) 一种基于线程池的数据通讯的方法及系统
CN109062708B (zh) 一种数据发送方法、接收方法及装置
CN108958755B (zh) 一种应用程序安装包的生成方法、装置及电子设备
CN113779452B (zh) 数据处理方法、装置、设备及存储介质
CN111835712A (zh) 一种数据传输方法、装置、系统、设备及存储介质
CN114721842A (zh) 服务调用方法、装置及电子设备
CN110019347A (zh) 一种区块链的数据处理方法、装置及终端设备
CN112711624A (zh) 数据打包控制方法、装置、电子设备和存储介质
CN108830724B (zh) 一种资源数据包处理方法及终端设备
CN102957633A (zh) 一种消息中间件的数据打包传输方法和系统
CN110740138A (zh) 数据传输方法和装置
WO2023287357A2 (en) Data transmission method, node and system
CN110691002B (zh) 一种中断检测方法及装置
CN112346661B (zh) 数据处理方法、装置和电子设备
CN112579357B (zh) 快照差量获取方法、装置、设备及存储介质
CN110266814B (zh) 传输方法及传输装置
CN113742101A (zh) 数据互通方法、装置、设备及可读存储介质
CN112135286A (zh) 一种基于蓝牙固件升级传输效率提升的方法及装置
CN106878412B (zh) 数据通信方法及装置
CN112132583A (zh) 区块链的交易处理方法、装置、电子设备及可读存储介质
CN110659139A (zh) 一种远程过程调用方法、计算机设备和存储介质
CN110795408A (zh) 基于对象存储的数据处理方法、装置、服务器和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant