CN105580334B - 一种数据传输方法、终端和服务器 - Google Patents
一种数据传输方法、终端和服务器 Download PDFInfo
- Publication number
- CN105580334B CN105580334B CN201480012225.7A CN201480012225A CN105580334B CN 105580334 B CN105580334 B CN 105580334B CN 201480012225 A CN201480012225 A CN 201480012225A CN 105580334 B CN105580334 B CN 105580334B
- Authority
- CN
- China
- Prior art keywords
- terminal
- descriptor
- transmission
- server
- segment
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
一种数据传输方法、终端和服务器。该传输方法包括:当服务器与发送终端和接收终端建立TCP连接时,服务器根据发送终端和接收终端建立的TCP连接分别为发送终端和接收终端生成第一连接描述符和第二连接描述符,当发送终端需要向接收终端传输数据文件时,服务器根据第一连接描述符接收发送终端通过TCP连接传输的文件描述符和接收终端的标识,文件描述符由发送终端根据需要传输的数据文件生成;服务器根据第二连接描述符将文件描述符传输至接收终端,以使发送终端和接收终端利用文件描述符,通过发送终端和接收终端之间的UDP连接传输数据文件。
Description
技术领域
本发明涉及网络通信技术领域,特别涉及一种数据传输方法、终端和服务器。
背景技术
在通信场景中,通信的双方经常会发送一些文件给对方,当文件数据比较大时,传输的性能就很影响用户体验,能高速平稳传输数据是最基本的需求。
目前一些通信软件,如即时通信软件,采用服务器中转的方式发送数据文件。参见图1,示出了现有方案中客户端之间传输数据的方法示意图。客户端C1需要向客户端C2传输数据时,图1中的箭头示出了数据传输的路径,客户端C1将数据先通过NAT(NetworkAddress Translation,网络地址转换)设备A传输至服务器,再由服务器将数据经由NAT设备A发送至客户端C2。
现有方案至少具有如下缺陷:
整个系统中,对文件服务器的性能要求比较高,如果同时发送文件的用户量大,文件服务器会成为影响系统性能的瓶颈,导致系统中数据传输速度缓慢。在一些极端情况下,即使位于局域网内的两个用户,经由服务器中转发送数据时,也会出现非常严重的网络延迟。
发明内容
为了解决上述问题,或者部分地解决上述问题,本发明实施例提供了一种数据传输方法、终端和服务器。
为了达到上述目的,本发明实施例采用的技术方案如下:
一方面,本发明实施例提供了一种数据传输方法,包括:
当服务器与发送终端和接收终端建立传输控制协议TCP连接时,服务器根据发送终端和接收终端建立的TCP连接分别为发送终端和接收终端生成第一连接描述符和第二连接描述符,
当发送终端需要向接收终端传输数据文件时,服务器根据第一连接描述符接收发送终端通过TCP连接传输的文件描述符和接收终端的标识,文件描述符由发送终端根据需要传输的数据文件生成;
服务器根据第二连接描述符将文件描述符传输至接收终端,以使发送终端和接收终端利用文件描述符,通过发送终端和接收终端之间的用户数据协议UDP连接传输数据文件。
再一方面,本发明实施例提供了一种数据传输的方法,包括:
当发送终端需要向接收终端传输数据文件时,发送终端根据需要传输的数据文件生成文件描述符,并通过与服务器建立的TCP连接,将文件描述符和接收终端的标识传输至服务器,以通过服务器将文件描述符传输至接收终端;
发送终端按照文件描述符中描述的文件信息,通过与接收终端之间建立的UDP连接,将数据文件传输至接收终端。
再一方面,本发明实施例提供了一种数据传输的方法,包括:
当发送终端需要向接收终端传输数据文件时,接收终端接收服务器通过TCP连接传输的来自发送终端的文件描述符,文件描述符由发送终端根据需要传输的数据文件生成;
接收终端通过与发送终端之间建立的UDP连接,接收发送终端按照文件描述符中描述的文件信息传输的数据文件,并根据接收结果更新文件描述符。
再一方面,本发明实施例提供了一种服务器,包括:
连接建立单元,用于当服务器与发送终端和接收终端建立传输控制协议TCP连接时,根据发送终端和接收终端建立的TCP连接分别为发送终端和接收终端生成第一连接描述符和第二连接描述符,
描述符接收单元,用于当发送终端需要向接收终端传输数据文件时,根据第一连接描述符接收发送终端通过TCP连接传输的文件描述符和接收终端的标识,文件描述符由发送终端根据需要传输的数据文件生成;
描述符传输单元,用于根据第二连接描述符将文件描述符传输至接收终端,以使发送终端和接收终端利用文件描述符,通过发送终端和接收终端之间的用户数据协议UDP连接传输数据文件。
再一方面,本发明实施例提供了一种终端,包括:
描述符上传单元,用于当发送终端需要向接收终端传输数据文件时,根据需要传输的数据文件生成文件描述符,并通过与服务器建立的TCP连接,将文件描述符和接收终端的标识传输至服务器,以通过服务器将文件描述符传输至接收终端;
数据文件传输单元,用于按照文件描述符中描述的文件信息,通过与接收终端之间建立的UDP连接,将数据文件传输至接收终端。
再一方面,本发明实施例提供了一种终端,包括:
描述符接收单元,用于当发送终端需要向接收终端传输数据文件时,接收服务器通过TCP连接传输的来自发送终端的文件描述符,文件描述符由发送终端根据需要传输的数据文件生成;
数据文件传输单元,用于通过与发送终端之间建立的UDP连接,接收发送终端按照文件描述符中描述的文件信息传输的数据文件,并根据接收结果更新文件描述符。
本发明实施例的有益效果是:
本发明实施例通过在终端之间建立直接的UDP连接,由UDP连接进行终端之间数据文件的传输,而通过终端与服务器之间的TCP连接负责文件描述符的传输,由于文件描述符的数据量远小于数据文件,大大降低了系统中服务器的数据处理压力。终端之间的UDP直连通路的数据速度较高,尤其是位于同一局域网的终端,从而能够实现数据的快速传输,而通过文件描述符又保证了终端之间数据传输的完整性和正确性。
由上,本发明实施例提供的方案能够达到大用户量场景下高速、稳定地传输数据的技术效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了现有方案中客户端之间传输数据的方法示意图;
图2示出了根据本发明一个实施例的一个应用本方案的通信场景的系统结构图;
图3示出了根据本发明一个实施例的一种服务器的工作流程示意图;
图4示出了根据本发明一个实施例的一种数据传输方法示意图;
图5示出了根据本发明一个实施例的双缓存队列示意图;
图6示出了根据本发明一个实施例的数据传输的方法流程图;
图7示出了根据本发明一个实施例的又一种数据传输的方法流程图;
图8示出了根据本发明一个实施例的一种服务器的结构示意图;
图9示出了根据本发明一个实施例的一种终端的结构示意图;
图10示出了根据本发明一个实施例的又一种终端的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参见图2,示出了本发明实施例的一个应用本方案的通信场景的系统结构图。示例性的,系统中包括终端C1、终端C2、终端D1和终端D2;NAT(Network Address Translation,网络地址转换)设备A和NAT设备B,以及服务器。终端C1和终端C2位于同一局域网,终端D1和终端D2位于同一局域网。图2所示的场景中,终端C1需要向终端C2发送数据文件,终端C1和终端C2之间建立有UDP(User Datagram Protocol,用户数据报协议)连接。
本系统所对应的数据传输流程要分为以下操作:
1:终端C1与服务器建立TCP(Transmission Control Protocol,传输控制协议)连接。
2:终端C2与服务器建立TCP连接。
3:终端C1在服务器上注册终端C1本机信息,该注册信息包括终端C1对应的连接描述符,还可以包括终端C1的标识。
4:终端C2在辅助服务器上注册终端C2本机信息,该注册信息包括终端C2对应的连接描述符,还可以包括终端C2的标识。
5:终端C1通过TCP连接发送文件描述符到服务器。
6:服务器将终端C1的文件描述符通过TCP连接发送给终端C2。
7:终端C1与终端C2根据文件描述符,通过彼此之间的UDP连接,采用多线程发送和接收数据文件。
相比于图1所示的现有技术的系统架构,本发明整体系统硬件架构中传统的文件服务器的角色起了变化,不再承担数据转发任务,仅仅作为数据传输过程的监控者,承担了辅助服务器的角色,负责为双方终端同步文件描述符。
下面分别对系统中的服务器和终端进行具体说明。
服务器
服务器通过与终端之间的TCP传输方式,能够保证数据的完整性,通知数据发送过程中丢包错误、数据包重复发送错误,并可以同步数据断点续传信息。本方案中的服务器不再承担数据文件转发工作后,主要传输数据是一些控制信息,因此服务器可支持大连接量、小数据片高速稳定的收发。
参见图3,示出了本发明一个实施例一种服务器的工作流程示意图,包括如下步骤:
S300:服务器判断是否继续循环执行数据收发操作,若是,进入步骤S301,若否跳过数据收发操作。
S301:服务器使用epoll通信模型,通过epoll事件等待方法的调用。当发生了方法调用时,进入S302。
S302:服务器判断方法调用的事件是否包括触发事件,当包括时,即触发事件的数量大于0时,进入S303,否则,进入S309。
S303:服务器确定被触发的事件,判断出触发事件都是哪些事件。
S304:服务器判断触发事件的类型。例如,服务器可以获取事件数据的指针,从指针中获取触发事件的类型。
S305:当触发事件为读事件时,即服务器接收终端发送来的数据时,服务器判断是否已经与该终端建立了连接,若是,进入S307,若否,进入S306。
S306:服务器与终端建立新连接,终端在服务器上注册本机信息。连接建立成功后,服务器接收终端发送的数据
S307:服务器利用与终端已经建立的连接,接收终端发送的数据。
S308:当触发事件为写事件时,服务器将相关的数据发送给对应的终端。
S309:服务器处理系统事件。
S310:服务器处理超时连接。对S309和S310的具体处理方式,在此不进行限定。
参见图4,本发明一个实施例提供的一种数据传输方法中,服务器可执行如下操作:
S400:当服务器与发送终端和接收终端建立传输控制协议TCP连接时,服务器根据发送终端和接收终端建立的TCP连接分别为发送终端和接收终端生成第一连接描述符和第二连接描述符。
连接描述符:用来确定唯一的网络套接字,其定义用以下伪码表示:
具体的,服务器根据与发送终端的TCP连接对应的网络套接字和相应的辅助标识生成第一连接描述符;服务器根据与接收终端的TCP连接对应的网络套接字和相应的辅助标识生成第二连接描述符。
本实施例使用网络套接字和64位整型递增量(辅助标识)组合来构成连接描述符,确定唯一的网络连接,在大量连接并发时,可避免失效的网络数据包对新创建的连接造成干扰。
S401:当发送终端需要向接收终端传输数据文件时,服务器根据第一连接描述符接收发送终端通过TCP连接传输的文件描述符和接收终端的标识,文件描述符由发送终端根据需要传输的数据文件生成。
参见图5,示出了本实施例的一种双缓存队列示意图。本实施例采用双缓存队列处理数据收发,如在服务器侧设置用于写入和发送文件描述符的双缓存队列,其中,在同一时刻下,一个缓存队列的状态为写入缓存队列,另一个缓存队列的状态为发送缓存队列;服务器在当前时刻下,利用转发逻辑处理线程将文件描述符增加至当前的写入缓存队列中,如将为文件描述符生成的数据描述符加入写入缓存队列从而实现将文件描述符加入写入操作中,利用IO发送线程将当前的发送缓存队列中对应的文件描述符发送给接收终端。在当前时刻之后,写入缓存队列和发送缓存队列的状态可能保持不变,也可能交换两个缓存队列的状态,即当前时刻的写入缓存队列在下一时刻的状态为发送缓存队列,当前时刻的发送缓存队列在下一时刻的状态为写入缓存队列,以提高缓存资源的利用率。
通过上述的双缓存队列处理机制,服务器在执行数据写操作的同时,还能够执行数据发送操作,提高了数据的发送性能。
首先,服务器根据发送终端上报的接收终端的标识,查找所有与服务器已建立连接的终端,得到接收终端的第二连接描述符。例如,在终端与服务器建立连接时生成的注册信息中会保存终端的连接描述符和标识,服务器在注册信息中进行查找可以得到接收终端的第二连接描述符。
再次,服务器利用转发逻辑处理线程,根据查找到的接收终端的第二连接描述符和来自发送终端的文件描述符生成数据描述符,具体如下:
数据描述符:用来描述服务器收到的和将要发送的网络数据包(如文件描述符),可以用以下伪码表示:
其中,数据起始位置指示文件描述符和第二连接描述符在预分配描述符池中的起始存储位置,数据长度指示文件描述符和第二连接描述符的大小。
其次,服务器利用转发逻辑线程将所述数据描述符添加至当前的写入缓存队列中。
最后,服务器执行写入操作时,根据当前的写入缓存队列中的数据描述符将对应的文件描述符写入预分配描述符池中。本实施例使用预分配描述符池来存储和管理文件描述符,避免描述符的创建和销毁操作带来的性能损耗。
S402:服务器根据第二连接描述符将文件描述符传输至接收终端,以使发送终端和接收终端利用文件描述符,通过发送终端和接收终端之间的UDP连接传输数据文件。
具体的,本步骤中包括如下操作:
服务器执行传输操作时,利用IO发送线程根据当前的发送缓存队列中的数据描述符将对应的文件描述符从预分配描述符池中提取出来,并根据数据描述符中的第二连接描述符将提取出来的文件描述符发送给接收终端。
上述服务器可以工作在Linux系统的epoll通信方式下,并满足如下实现模式:
1)服务器通过参数设置,如SO_REUSEADDR参数,开启端口重用功能;
2)服务器通过参数设置,如O_NONBLOCK参数,使套接字为非阻塞模式;
3)服务器通过参数设置,如TCP_NODELAY参数,禁止合并发送数据;
4)仅对epoll事件处理使用单线程,避免上下文切换的损耗和内存锁争用;
5)使用双缓存队列处理数据收发;
6)使用预分配数据描述符池,避免创建和销毁操作带来的性能损耗;
8)使用数据描述符控制数据收发,避免内存拷贝
9)保持连接及维护心跳数据包收发;
10)检查超时的无效连接并关闭端口、释放资源。
其中,epoll方式能提供Linux下多路复用IO接口,能提高程序在大并发连接中只有少量活跃时CPU的利用率。服务器可以通过调用服务器操作IO(Input/Output,输入/输出)控制方法设置该服务器工作在Linux系统的epoll通信方式下。对上述1)至3)中参数设置的次序不进行限定,只要在服务器执行对发送终端和接收终端的数据监控之前,完成1)至3)中参数设置即可。
本方案通过epoll通信方式、端口重用、非阻塞模式、禁止合并发送、预分配描述符池和双缓存发送队列(发送数据的同时向后台发送队列写数据)等操作的组合,保证了数据文件的传输性能。
本实施例中的描述符,是用一组关键数据表示实际对象的位置、大小和状态等信息,但并不是操作对象本身。而套接字,用一个整型值表示通信双方之间的通路,系统通过套接字确定通信双方的连接。
终端
终端作为一次数据文件传输中的发送方时,如发送终端需要向接收终端传输数据文件时,本发明一个实施例提供的一种数据传输的方法,参见图6,包括如下操作:
S600:发送终端根据需要传输的数据文件生成文件描述符,并通过与服务器建立的TCP连接,将文件描述符和接收终端的标识传输至服务器,以通过服务器将文件描述符传输至接收终端。
本实施例发送终端经由与服务器建立的TCP连接,通过文件描述符将数据控制信息和验证信息发送给服务器,并由服务器将这些信息转发至接收终端。这些信息包括数据大小、校验码,数据文件被分为小的数据片段的数量、数据片段大小和数据片段的校验码等。
数据文件会被拆分为小的数据片段,并为数据片段生成序号和验证码(如CRC验证码),序号和验证码通过TCP连接由服务器转发到接收终端。
其中,文件描述符中描述的文件信息包括:数据文件的总长度、数据文件的校验码、由一个或多个文件片段描述符组成的片段序列、片段数量。数据文件的校验码可以采用数据文件的MD5值实现,则文件描述符可以表示如下:
其中,文件片段描述符包括片段标识符、片段长度、片段校验码和指示片段是否传输成功的片段状态。片段文件的校验码可以采用片段文件的CRC值实现,则片段描述符可以表示如下:
S601:发送终端按照文件描述符中描述的文件信息,通过与接收终端之间建立的UDP连接,将所述数据文件传输至接收终端。
数据片段直接由UDP连接从发送终端直接发给接收终端,然后重新组合成数据文件。
可以理解,当数据文件没有被划分为多个数据片段的场景,数据文件本身可视为一个片段。
另外,本实施例还包括:在数据文件传输过程中,发送终端通过TCP连接接收服务器传输的来自接收终端的更新后的文件描述符;发送终端根据更新后的文件描述符判断数据文件是否传输成功,若是,发送终端结束本次传输操作,若否,发送终端将传输失败的片段通过UDP连接重新传输至接收终端。
具体的,发送终端可通过如下方式判断数据文件是否传输成功:发送终端解析更新后的文件描述符中的片段序列,判断解析出的片段序列中所有文件片段描述符中的片段状态是否指示传输成功,若是,如片段状态的状态值为1时,确认本次数据文件传输成功;若否,如片段状态的状态值为0时,获取指示传输失败的片段状态对应的片段,确认需要向接收终端重发该片段。
终端作为一次数据文件传输中的接收方时,如接收终端需要接收发送终端传输来的数据文件时,本发明一个实施例提供的又一种数据传输的方法,参见图7,包括如下操作:
S700:接收终端接收服务器通过TCP连接传输的来自发送终端的文件描述符,该文件描述符由发送终端根据需要传输的数据文件生成。文件描述符的具体内容可参见上文相关描述。
S701:接收终端通过与发送终端之间建立的UDP连接,接收发送终端按照文件描述符中描述的文件信息传输的数据文件,并根据接收结果更新文件描述符。
接收终端采用与生成数据文件的校验码相同的算法(如MD5算法),计算接收到的数据文件的校验值,根据计算出的数据文件的校验值和数据文件的校验码获取对数据文件的接收结果,当两者相同时,确定接收结果为数据文件正确接收;
接收终端采用与生成片段的校验码相同的算法(如CRC算法),计算接收到的片段的校验值,根据计算出的片段的校验值和所述片段校验码获取对片段的接收结果,当两者相同时,确定接收结果为片段正确接收。
本实施例中,接收终端根据数据的接收结果,可执行如下操作:
接收终端可以根据接收结果更新文件描述符,具体包括:当接收结果为片段接收成功时,接收终端将文件描述符中相应的片段状态更新为正确接收,如接收终端将片段状态的状态值设置为1。
以及,当接收结果为片段接收失败时,接收终端接收发送终端通过UDP连接重传的相应片段,并根据重传片段的接收结果更新文件描述符。
另外,作为接收方的接收终端还可以根据文件描述符检查到重复接收了相同的片段时,丢弃重复的片段。接收终端还可以在对小文件数据完成接收后,将小文件数据一次性写入磁盘。而对大文件数据,采用增量方式写入磁盘。
上述作为发送方的终端(发送终端)和作为接收方的终端(接收终端)之间可采用多线程发送和接收数据包,以提高数据传输的速度。
由上述内容可知,本方案的终端至少具有如下特点:
1)作为发送方与接收方的终端之间通过服务器来同步文件描述符;
2)终端之间通过UDP连接传输数据文件;
3)终端可以使用多线程发送和接收数据包;
4)接收终端检查未正确接收收到片段,并同步状态给发送方终端;
5)接收终端检查重复接收的片段并丢弃;
6)接收终端可以将小文件数据一次性写入磁盘;
7)接收终端可以将大文件数据以增量方式写入磁盘。
本技术方案,能够降低服务器的数据处理压力,可为更多的用户提供服务,并且,通过终端之间的UDP直连连接(网络延迟小),能够更快地完成数据文件的发送。
本发明实施例还提供了一种服务器800,参见图8,该服务器800包括:
连接建立单元810,用于当服务器与发送终端和接收终端建立传输控制协议TCP连接时,根据发送终端和接收终端建立的TCP连接分别为发送终端和接收终端生成第一连接描述符和第二连接描述符。具体的,连接建立单元810,用于根据与发送终端的TCP连接对应的网络套接字和相应的辅助标识生成第一连接描述符;根据与接收终端的TCP连接对应的网络套接字和相应的辅助标识生成第二连接描述符。
描述符接收单元811,用于当发送终端需要向接收终端传输数据文件时,根据第一连接描述符接收发送终端通过TCP连接传输的文件描述符和接收终端的标识,文件描述符由发送终端根据需要传输的数据文件生成。具体的,描述符接收单元811,用于根据发送终端上报的接收终端的标识,查找所有与服务器已建立连接的终端,得到接收终端的第二连接描述符;根据查找到的接收终端的第二连接描述符和来自发送终端的文件描述符生成数据描述符,该数据描述符中包括第二连接描述符、连接IP地址、连接端口号、数据起始位置和数据长度;将所述数据描述符添加至当前的写入缓存队列中;执行写入操作时,根据当前的写入缓存队列中的数据描述符将对应的文件描述符写入预分配描述符池中,其中,数据起始位置指示文件描述符和第二连接描述符在预分配描述符池中的起始存储位置,数据长度指示文件描述符和第二连接描述符的大小。
描述符传输单元812,用于根据第二连接描述符将文件描述符传输至接收终端,以使发送终端和接收终端利用文件描述符,通过发送终端和接收终端之间的用户数据协议UDP连接传输数据文件。具体的,描述符传输单元812,用于利用IO发送线程根据当前的发送缓存队列中的数据描述符将对应的文件描述符从预分配描述符池中提取出来,并根据数据描述符中的第二连接描述符将提取出来的文件描述符发送给接收终端;其中,数据起始位置指示文件描述符和第二连接描述符在预分配描述符池中的起始存储位置,数据长度指示文件描述符和第二连接描述符的大小。
上述服务器800还包括:双缓存控制单元813,用于设置用于写入和发送文件描述符的双缓存队列,其中,在同一时刻下,一个缓存队列的状态为写入缓存队列,另一个缓存队列的状态为发送缓存队列;在当前时刻下,利用转发逻辑处理线程控制描述符接收单元811将文件描述符增加至当前的写入缓存队列中,利用IO发送线程控制描述符传输单元812将当前的发送缓存队列中对应的文件描述符发送给接收终端。
本实施例提供的服务器800工作在Linux系统的epoll通信方式下;以及,服务器800通过参数设置开启端口重用功能;服务器800通过参数设置使套接字为非阻塞模式;服务器800通过参数设置禁止合并发送数据。例如,服务器调用服务器操作IO控制方法设置该服务器工作在Linux系统的epoll通信方式下并实现上述参数设置。
本发明产品实施例中服务器各单元的具体工作方式,可以参见本发明方法实施例中服务器执行的操作的相关内容,不再赘述。
本发明一个实施例提供的一种作为数据发送方的终端900,参见图9,包括如下:
描述符上传单元910,用于当发送终端需要向接收终端传输数据文件时,根据需要传输的数据文件生成文件描述符,并通过与服务器建立的TCP连接,将文件描述符和接收终端的标识传输至服务器,以通过服务器将文件描述符传输至接收终端。文件描述符中描述的文件信息包括:数据文件的总长度、数据文件的校验码、由一个或多个文件片段描述符组成的片段序列、片段数量。文件片段描述符包括片段标识符、片段长度、片段校验码和指示片段是否传输成功的片段状态。
数据文件发送单元911,用于按照文件描述符中描述的文件信息,通过与接收终端之间建立的UDP连接,将数据文件传输至接收终端。具体的,数据文件发送单元911,用于解析更新后的文件描述符中的片段序列,判断解析出的片段序列中所有文件片段描述符中的片段状态是否指示传输成功,若是,确认本次数据文件传输成功;若否,获取指示传输失败的片段状态对应的片段,确认需要向接收终端重发该片段。
进一步的,描述符上传单元910还用于在数据文件传输过程中,通过TCP连接接收服务器传输的来自接收终端的更新后的文件描述符。相应的,数据文件发送单元911,用于根据更新后的文件描述符判断数据文件是否传输成功,若是,结束本次传输操作,若否,将传输失败的片段通过UDP连接重新传输至接收终端。
本发明一个实施例提供的一种作为数据接收方的终端1000,参见图10,包括如下:
描述符接收单元1010,用于当发送终端需要向接收终端传输数据文件时,接收服务器通过TCP连接传输的来自发送终端的文件描述符,文件描述符由发送终端根据需要传输的数据文件生成。文件描述符中描述的文件信息包括:数据文件的总长度、数据文件的校验码、由一个或多个文件片段描述符组成的片段序列、片段数量;其中,文件片段描述符包括片段标识符、片段长度、片段校验码和指示片段是否传输成功的片段状态;
数据文件接收单元1011,用于通过与发送终端之间建立的UDP连接,接收发送终端按照文件描述符中描述的文件信息传输的数据文件,并根据接收结果更新文件描述符。具体的,数据文件接收单元1011,用于计算接收到的数据文件的校验值,根据计算出的数据文件的校验值和数据文件的校验码获取对数据文件的接收结果;以及,数据文件接收单元1011,用于计算接收到的片段的校验值,根据计算出的片段的校验值和片段校验码获取对片段的接收结果。以及,数据文件接收单元1011,用于当接收结果为片段接收成功时,将文件描述符中相应的片段状态更新为正确接收。数据文件接收单元1011,用于当接收结果为片段接收失败时,接收发送终端通过UDP连接重传的相应片段,并根据重传片段的接收结果更新文件描述符。数据文件接收单元1011,用于根据文件描述符检查到重复接收了相同的片段时,丢弃重复的片段。
本发明产品实施例中终端各单元的具体工作方式,可以参见本发明方法实施例中终端执行的操作的相关内容,不再赘述。
本发明实施例通过在终端之间建立直接的UDP连接,由UDP连接进行终端之间数据文件的传输,而通过终端与服务器之间的TCP连接负责文件描述符的传输,由于文件描述符的数据量远小于数据文件,大大降低了系统中服务器的数据处理压力。终端之间的UDP直连通路的数据速度较高,尤其是位于同一局域网的终端,从而能够实现数据的快速传输,而通过文件描述符又保证了终端之间数据传输的完整性和正确性。
本发明实施例提供的方案能够达到大用户量场景下高速、稳定地传输数据的技术效果。
本领域的技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。此外,不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
为了便于清楚描述本发明实施例的技术方案,在发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (18)
1.一种数据传输方法,其特征在于,所述方法包括:
当服务器与发送终端和接收终端建立传输控制协议TCP连接时,服务器根据发送终端和接收终端建立的TCP连接分别为发送终端和接收终端生成第一连接描述符和第二连接描述符;
当发送终端需要向接收终端传输数据文件时,服务器根据第一连接描述符接收发送终端通过所述TCP连接传输的文件描述符和接收终端的标识,所述文件描述符由发送终端根据需要传输的数据文件生成;
服务器根据第二连接描述符将所述文件描述符传输至接收终端,以使发送终端和接收终端利用所述文件描述符,通过发送终端和接收终端之间的用户数据协议UDP连接传输数据文件;
其中,服务器根据与发送终端的TCP连接对应的网络套接字和相应的辅助标识生成第一连接描述符;服务器根据与接收终端的TCP连接对应的网络套接字和相应的辅助标识生成第二连接描述符。
2.如权利要求1所述的方法,其特征在于,还包括:
服务器设置用于写入和发送文件描述符的双缓存队列,其中,在同一时刻下,一个缓存队列的状态为写入缓存队列,另一个缓存队列的状态为发送缓存队列;
服务器在当前时刻下,利用转发逻辑处理线程将文件描述符增加至当前的写入缓存队列中,利用IO发送线程将当前的发送缓存队列中对应的文件描述符发送给接收终端。
3.如权利要求2所述的方法,其特征在于,所述服务器根据第一连接描述符接收发送终端通过所述TCP连接传输的文件描述符和接收终端的标识包括:
服务器利用转发逻辑处理线程,根据发送终端上报的接收终端的标识,查找所有与服务器已建立连接的终端,得到接收终端的第二连接描述符;
服务器利用转发逻辑处理线程,根据查找到的接收终端的第二连接描述符和来自发送终端的文件描述符生成数据描述符,所述数据描述符中包括第二连接描述符、连接IP地址、连接端口号、数据起始位置和数据长度;
服务器利用转发逻辑线程将所述数据描述符添加至当前的写入缓存队列中;
服务器执行写入操作时,根据当前的写入缓存队列中的数据描述符将对应的文件描述符写入预分配描述符池中;
其中,所述数据起始位置指示文件描述符和第二连接描述符在预分配描述符池中的起始存储位置,所述数据长度指示文件描述符和第二连接描述符的大小。
4.如权利要求2所述的方法,其特征在于,所述服务器根据第二连接描述符将该文件描述符传输至接收终端包括:
服务器执行传输操作时,利用IO发送线程根据当前的发送缓存队列中的数据描述符将对应的文件描述符从预分配描述符池中提取出来,并根据数据描述符中的第二连接描述符将提取出来的文件描述符发送给接收终端。
5.如权利要求1至4任一项所述的方法,其特征在于,还包括:
服务器调用服务器操作IO控制方法设置所述服务器工作在Linux系统的epoll通信方式下;以及,服务器调用服务器操作IO控制方法通过参数设置开启所述服务器的端口重用功能;并且,通过参数设置将所述服务器的套接字设置为非阻塞模式;以及,通过参数设置禁止所述服务器合并发送数据。
6.一种数据传输的方法,其特征在于,所述方法包括:
当发送终端需要向接收终端传输数据文件时,发送终端根据需要传输的数据文件生成文件描述符,并通过与服务器建立的TCP连接,将所述文件描述符和接收终端的标识传输至服务器,以通过服务器将所述文件描述符传输至接收终端;
发送终端按照文件描述符中描述的文件信息,通过与接收终端之间建立的UDP连接,将所述数据文件传输至接收终端。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
在数据文件传输过程中,发送终端通过TCP连接接收服务器传输的来自接收终端的更新后的文件描述符;
发送终端根据更新后的文件描述符判断数据文件是否传输成功,若是,发送终端结束本次传输操作,若否,发送终端将传输失败的片段通过UDP连接重新传输至接收终端;
其中,所述文件描述符中描述的文件信息包括:
数据文件的总长度、数据文件的校验码、由一个或多个文件片段描述符组成的片段序列、片段数量;
其中,所述文件片段描述符包括片段标识符、片段长度、片段校验码和指示片段是否传输成功的片段状态。
8.如权利要求6所述的方法,其特征在于,所述发送终端根据更新后的文件描述符判断数据文件是否传输成功包括:
发送终端解析更新后的文件描述符中的片段序列,判断解析出的片段序列中所有文件片段描述符中的片段状态是否指示传输成功,若是,确认本次数据文件传输成功;若否,获取指示传输失败的片段状态对应的片段,确认需要向接收终端重发该片段。
9.一种数据传输的方法,其特征在于,所述方法包括:
当发送终端需要向接收终端传输数据文件时,接收终端接收服务器通过TCP连接传输的来自发送终端的文件描述符,所述文件描述符由发送终端根据需要传输的数据文件生成;
接收终端通过与发送终端之间建立的UDP连接,接收发送终端按照文件描述符中描述的文件信息传输的数据文件,并根据接收结果更新文件描述符。
10.如权利要求9所述的方法,其特征在于,所述文件描述符中描述的文件信息包括:数据文件的总长度、数据文件的校验码、由一个或多个文件片段描述符组成的片段序列、片段数量;其中,所述文件片段描述符包括片段标识符、片段长度、片段校验码和指示片段是否传输成功的片段状态;
所述根据接收结果更新文件描述符包括:
接收终端计算接收到的数据文件的校验值,根据计算出的数据文件的校验值和所述数据文件的校验码获取对数据文件的接收结果;以及,
接收终端计算接收到的片段的校验值,根据计算出的片段的校验值和所述片段校验码获取对片段的接收结果。
11.如权利要求10所述的方法,其特征在于,所述根据接收结果更新文件描述符还包括:
当接收结果为片段接收成功时,接收终端将文件描述符中相应的片段状态更新为正确接收;
所述方法还包括:
当接收结果为片段接收失败时,接收终端接收发送终端通过UDP连接重传的相应片段,并根据重传片段的接收结果更新文件描述符;以及,
接收终端根据文件描述符检查到重复接收了相同的片段时,丢弃重复的片段。
12.一种服务器,其特征在于,包括:
连接建立单元,用于当服务器与发送终端和接收终端建立传输控制协议TCP连接时,根据发送终端和接收终端建立的TCP连接分别为发送终端和接收终端生成第一连接描述符和第二连接描述符;
描述符接收单元,用于当发送终端需要向接收终端传输数据文件时,根据第一连接描述符接收发送终端通过所述TCP连接传输的文件描述符和接收终端的标识,所述文件描述符由发送终端根据需要传输的数据文件生成;
描述符传输单元,用于根据第二连接描述符将所述文件描述符传输至接收终端,以使发送终端和接收终端利用所述文件描述符,通过发送终端和接收终端之间的用户数据协议UDP连接传输数据文件;
所述连接建立单元,用于根据与发送终端的TCP连接对应的网络套接字和相应的辅助标识生成第一连接描述符;根据与接收终端的TCP连接对应的网络套接字和相应的辅助标识生成第二连接描述符。
13.如权利要求12所述的服务器,其特征在于,还包括:双缓存控制单元,用于设置用于写入和发送文件描述符的双缓存队列,其中,在同一时刻下,一个缓存队列的状态为写入缓存队列,另一个缓存队列的状态为发送缓存队列;在当前时刻下,利用转发逻辑处理线程控制所述描述符接收单元将文件描述符增加至当前的写入缓存队列中,利用IO发送线程控制所述描述符传输单元将当前的发送缓存队列中对应的文件描述符发送给接收终端;
其中,所述描述符接收单元,用于根据发送终端上报的接收终端的标识,查找所有与服务器已建立连接的终端,得到接收终端的第二连接描述符;根据查找到的接收终端的第二连接描述符和来自发送终端的文件描述符生成数据描述符,所述数据描述符中包括第二连接描述符、连接IP地址、连接端口号、数据起始位置和数据长度;将所述数据描述符添加至当前的写入缓存队列中;执行写入操作时,根据当前的写入缓存队列中的数据描述符将对应的文件描述符写入预分配描述符池中;
所述描述符传输单元,用于利用IO发送线程根据当前的发送缓存队列中的数据描述符将对应的文件描述符从预分配描述符池中提取出来,并根据数据描述符中的第二连接描述符将提取出来的文件描述符发送给接收终端;
其中,所述数据起始位置指示文件描述符和第二连接描述符在预分配描述符池中的起始存储位置,所述数据长度指示文件描述符和第二连接描述符的大小。
14.如权利要求12至13任一项所述的服务器,其特征在于,
所述服务器调用服务器操作IO控制方法设置该服务器工作在Linux系统的epoll通信方式下;以及,
所述服务器调用服务器操作IO控制方法,通过参数设置开启端口重用功能;并且,通过参数设置使套接字为非阻塞模式;以及,通过参数设置禁止合并发送数据。
15.一种终端,其特征在于,包括:
描述符上传单元,用于当发送终端需要向接收终端传输数据文件时,根据需要传输的数据文件生成文件描述符,并通过与服务器建立的TCP连接,将所述文件描述符和接收终端的标识传输至服务器,以通过服务器将所述文件描述符传输至接收终端;
数据文件发送单元,用于按照文件描述符中描述的文件信息,通过与接收终端之间建立的UDP连接,将所述数据文件传输至接收终端。
16.如权利要求15所述的终端,其特征在于,
所述描述符上传单元,用于在数据文件传输过程中,通过TCP连接接收服务器传输的来自接收终端的更新后的文件描述符;
所述数据文件发送单元,用于根据更新后的文件描述符判断数据文件是否传输成功,若是,结束本次传输操作,若否,将传输失败的片段通过UDP连接重新传输至接收终端;
其中,所述文件描述符中描述的文件信息包括:数据文件的总长度、数据文件的校验码、由一个或多个文件片段描述符组成的片段序列、片段数量;
其中,所述文件片段描述符包括片段标识符、片段长度、片段校验码和指示片段是否传输成功的片段状态;
以及,所述数据文件发送单元,用于解析更新后的文件描述符中的片段序列,判断解析出的片段序列中所有文件片段描述符中的片段状态是否指示传输成功,若是,确认本次数据文件传输成功;若否,获取指示传输失败的片段状态对应的片段,确认需要向接收终端重发该片段。
17.一种终端,其特征在于,包括:
描述符接收单元,用于当发送终端需要向接收终端传输数据文件时,接收服务器通过TCP连接传输的来自发送终端的文件描述符,所述文件描述符由发送终端根据需要传输的数据文件生成;
数据文件接收单元,用于通过与发送终端之间建立的UDP连接,接收发送终端按照文件描述符中描述的文件信息传输的数据文件,并根据接收结果更新文件描述符。
18.如权利要求17所述的终端,其特征在于,所述文件描述符中描述的文件信息包括:数据文件的总长度、数据文件的校验码、由一个或多个文件片段描述符组成的片段序列、片段数量;其中,所述文件片段描述符包括片段标识符、片段长度、片段校验码和指示片段是否传输成功的片段状态;
所述数据文件接收单元,用于计算接收到的数据文件的校验值,根据计算出的数据文件的校验值和所述数据文件的校验码获取对数据文件的接收结果;
以及,
所述数据文件接收单元,用于计算接收到的片段的校验值,根据计算出的片段的校验值和所述片段校验码获取对片段的接收结果;
以及,所述数据文件接收单元,还用于当接收结果为片段接收成功时,将文件描述符中相应的片段状态更新为正确接收;
所述数据文件接收单元,还用于当接收结果为片段接收失败时,接收发送终端通过UDP连接重传的相应片段,并根据重传片段的接收结果更新文件描述符;所述数据文件传输单元,还用于根据文件描述符检查到重复接收了相同的片段时,丢弃重复的片段。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/081180 WO2016000138A1 (zh) | 2014-06-30 | 2014-06-30 | 一种数据传输方法、终端和服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105580334A CN105580334A (zh) | 2016-05-11 |
CN105580334B true CN105580334B (zh) | 2018-10-26 |
Family
ID=55018232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480012225.7A Active CN105580334B (zh) | 2014-06-30 | 2014-06-30 | 一种数据传输方法、终端和服务器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105580334B (zh) |
WO (1) | WO2016000138A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022148363A1 (zh) * | 2021-01-06 | 2022-07-14 | 上海哔哩哔哩科技有限公司 | 数据传输方法及数据传输服务器 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3531294A4 (en) * | 2016-10-24 | 2020-07-01 | Aptpod, Inc. | DATA ACQUISITION SYSTEM, DATA ACQUISITION METHOD, CLIENT DEVICE, SERVER DEVICE AND PROGRAM |
CN109818748A (zh) * | 2018-12-28 | 2019-05-28 | 北京奇安信科技有限公司 | 数据传输方法、设备、系统和介质 |
CN113315797A (zh) * | 2020-02-26 | 2021-08-27 | 新开普电子股份有限公司 | 一种局域网批量远程升级方法、系统及节点 |
CN112637382B (zh) | 2021-01-06 | 2022-04-26 | 上海哔哩哔哩科技有限公司 | 数据发送方法及装置、建立p2p连接的方法及系统 |
CN114629891A (zh) * | 2021-12-17 | 2022-06-14 | 亚信科技(中国)有限公司 | 文件传输方法、装置、电子设备及计算机可读存储介质 |
CN114979040B (zh) * | 2022-05-07 | 2024-02-20 | 成都数之联科技股份有限公司 | 一种udp报文写入方法及系统及装置及介质 |
CN115086441B (zh) * | 2022-06-09 | 2024-03-19 | 北京百度网讯科技有限公司 | 信息传输方法、装置、电子设备及存储介质 |
CN114928634B (zh) * | 2022-06-29 | 2023-12-29 | 肇庆小鹏新能源投资有限公司广州分公司 | 泊车控制方法和计算机可读存储介质 |
CN116599953B (zh) * | 2023-07-13 | 2024-02-02 | 苏州浪潮智能科技有限公司 | 一种文件上传的方法、装置、系统、设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6263001B1 (en) * | 1997-08-02 | 2001-07-17 | International Business Machines Corporation | Packet data communication protocol with reduced acknowledgements in a client/server computing system |
CN101369987A (zh) * | 2007-08-16 | 2009-02-18 | 阿里巴巴集团控股有限公司 | 一种建立通信通道的方法及装置 |
CN102215240A (zh) * | 2010-04-02 | 2011-10-12 | 中国移动通信集团公司 | 流媒体信令发送方法及设备、以及点对点流媒体系统 |
CN102355448A (zh) * | 2011-06-29 | 2012-02-15 | 北京原力创新科技有限公司 | 云流媒体数据传输方法及系统 |
CN102868665A (zh) * | 2011-07-05 | 2013-01-09 | 华为软件技术有限公司 | 数据传输的方法及装置 |
-
2014
- 2014-06-30 CN CN201480012225.7A patent/CN105580334B/zh active Active
- 2014-06-30 WO PCT/CN2014/081180 patent/WO2016000138A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6263001B1 (en) * | 1997-08-02 | 2001-07-17 | International Business Machines Corporation | Packet data communication protocol with reduced acknowledgements in a client/server computing system |
CN101369987A (zh) * | 2007-08-16 | 2009-02-18 | 阿里巴巴集团控股有限公司 | 一种建立通信通道的方法及装置 |
CN102215240A (zh) * | 2010-04-02 | 2011-10-12 | 中国移动通信集团公司 | 流媒体信令发送方法及设备、以及点对点流媒体系统 |
CN102355448A (zh) * | 2011-06-29 | 2012-02-15 | 北京原力创新科技有限公司 | 云流媒体数据传输方法及系统 |
CN102868665A (zh) * | 2011-07-05 | 2013-01-09 | 华为软件技术有限公司 | 数据传输的方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022148363A1 (zh) * | 2021-01-06 | 2022-07-14 | 上海哔哩哔哩科技有限公司 | 数据传输方法及数据传输服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN105580334A (zh) | 2016-05-11 |
WO2016000138A1 (zh) | 2016-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105580334B (zh) | 一种数据传输方法、终端和服务器 | |
CN108881008B (zh) | 一种数据传输的方法、装置和系统 | |
CN105162883B (zh) | 网络负载均衡处理系统及其方法和装置 | |
Shi et al. | NDNLP: A link protocol for NDN | |
CN108881158A (zh) | 数据交互系统和方法 | |
CN103310669B (zh) | 一种用于互动教学的数据传输方法及系统 | |
US10063444B2 (en) | Network traffic capture analysis | |
CN105847142B (zh) | 一种报文传输方法及装置 | |
US20140283000A1 (en) | Proxy that Switches from Light-Weight Monitor Mode to Full Proxy | |
EP3493507A1 (en) | Session persistence method and apparatus, and storage medium | |
CN108429682A (zh) | 一种网络传输链路的优化方法及系统 | |
Arye et al. | A formally-verified migration protocol for mobile, multi-homed hosts | |
CN102315918B (zh) | 一种tcp连接与sctp连接互通的方法及装置 | |
CN113765718B (zh) | 一种面向quic协议的测试拓扑构建方法及装置 | |
CN109327470A (zh) | 一种用于实现ssl加密传输的方法和装置 | |
CN106131039A (zh) | Syn洪泛攻击的处理方法及装置 | |
KR20160022327A (ko) | 소프트웨어 정의 네트워킹 네트워크에서 트랜잭션 관리 방법 | |
CN103535075B (zh) | 移动设备驱动的信息交换 | |
CN104969533B (zh) | 一种数据包处理方法和装置 | |
CN100393039C (zh) | 无ip地址设备网管方法 | |
CN105700950B (zh) | 一种数据通信方法及装置 | |
CN101510901B (zh) | 一种分布式设备间的通信方法、通信设备和通信系统 | |
US7864800B2 (en) | Communication system, auxiliary device and communication method | |
CN111314447B (zh) | 代理服务器及其处理访问请求的方法 | |
CN105991629A (zh) | Tcp连接建立方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: Room 810, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080 Patentee after: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building 6 storey block A room 602 Patentee before: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |