本发明涉及数据传输领域,具体涉及一种基于UDP协议的数据传输方法及系统。
背景技术:
目前的网络游戏一般是基于TCP协议实现客户端与服务器之间的数据传输的,TCP协议的数据传输特点是可靠性高,但缺点是延迟性也高。
大型MMORPG(多人在线角色扮演)网络游戏中,很多游戏功能是对数据包的传输即时性有要求的,即需要低延迟的数据传输方式进行保障。对于使用TCP协议的数据传输方式显然不能满足大型MMORPG网络游戏的需求。
技术实现要素:
本发明提供了一种基于UDP协议的数据传输方法及系统,可以使用低延迟的UDP协议实现客户端与服务器之间的数据传输,同时保证数据包传输的可靠性。
本发明提供了一种基于UDP协议的数据传输方法,发送方与接收方通过UDP协议建立连接,所述方法包括:
所述发送方将具有同一有序标识的数据包依次放入第一发包队列中,所述具有同一有序标识的数据包分别携带表示发送顺序的序列号,所述第一发包队列用于存放具有有序标识的数据包;依次发送所述第一发包队列中的数据包;
所述接收方在接收到具有有序标识的数据包后,将所述数据包放入第一收包队列中,所述第一收包队列用于存放具有有序标识的数据包;并根据所述第一收包队列中具有同一有序标识的数据包携带的序列号,确定具有同一有序标识的数据包是否全部成功接收。
优选地,所述方法还包括:
如果在预设的时间阈值内,所述第一收包队列中具有同一有序标识的数据包未被全部成功接收,则所述接收方向所述发送方返回重发请求,所述重发请 求用于请求所述发送方重新发送未被成功接收的数据包。
优选地,所述方法还包括:
所述发送方在发送所述具有同一有序标识的数据包中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
优选地,所述方法还包括:
所述发送方将具有可靠标识的数据包放入第二发包队列中,所述第二发包队列用于存放具有可靠标识的数据包;发送所述第二发包队列中的数据包;
所述接收方在接收到具有可靠标识的数据包后,向所述发送方返回确认响应。
优选地,所述方法还包括:
所述发送方在发送所述第二发包队列中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
优选地,所述发送方与所述接收方利用通道进行数据传输,所述通道包括第一通道和第二通道,所述第一通道用于传输具有有序标识的数据包,所述第二通道用于传输具有可靠标识的数据包;
相应的,所述发送方依次发送所述第一发包队列中的数据包,具体为,
所述发送方通过所述第一通道,依次发送所述第一发包队列中的数据包;
相应的,所述发送方发送所述第二发包队列中的数据包,具体为,
所述发送方通过所述第二通道,发送所述第二发包队列中的数据包。
本发明还提供了一种基于UDP协议的数据传输系统,所述系统包括发送方和接收方,所述发送方与所述接收方通过UDP协议建立连接;
所述发送方,用于将具有同一有序标识的数据包依次放入第一发包队列中,所述具有同一有序标识的数据包分别携带表示发送顺序的序列号,所述第一发包队列用于存放具有有序标识的数据包;依次发送所述第一发包队列中的数据包;
所述接收方,用于在接收到具有有序标识的数据包后,将所述数据包放入第一收包队列中,所述第一收包队列用于存放具有有序标识的数据包;并根据 所述第一收包队列中具有同一有序标识的数据包携带的序列号,确定具有同一有序标识的数据包是否全部成功接收。
优选地,所述接收方,还用于在预设的时间阈值内,所述第一收包队列中具有同一有序标识的数据包未被全部成功接收时,向所述发送方返回重发请求,所述重发请求用于请求所述发送方重新发送未被成功接收的数据包。
优选地,所述发送方,还用于在发送所述具有同一有序标识的数据包中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
优选地,所述发送方,还用于将具有可靠标识的数据包放入第二发包队列中,所述第二发包队列用于存放具有可靠标识的数据包;发送所述第二发包队列中的数据包;
所述接收方,还用于在接收到具有可靠标识的数据包后,向所述发送方返回确认响应。
优选地,所述发送方,还用于在发送所述第二发包队列中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
优选地,所述发送方与所述接收方利用通道进行数据传输,所述通道包括第一通道和第二通道,所述第一通道用于传输具有有序标识的数据包,所述第二通道用于传输具有可靠标识的数据包;
相应的,所述发送方,具体用于通过所述第一通道,依次发送所述第一发包队列中的数据包;
相应的,所述发送方,具体用于通过所述第二通道,发送所述第二发包队列中的数据包。
本发明提供的基于UDP协议的数据传输方法中,发送方与接收方通过UDP协议建立连接,所述发送方将具有同一有序标识的数据包依次放入第一发包队列中,所述具有同一有序标识的数据包分别携带表示发送顺序的序列号,所述第一发包队列用于存放具有有序标识的数据包;依次发送所述第一发包队列中的数据包;所述接收方在接收到具有有序标识的数据包后,将所述数据包放入第一收包队列中,所述第一收包队列用于存放具有有序标识的数据 包;并根据所述第一收包队列中具有同一有序标识的数据包携带的序列号,确定具有同一有序标识的数据包是否全部成功接收。本发明通过设置数据包的有序发送策略,接收方可以根据数据包的序列号确定数据包是否接收成功,并在携带任何一个序列号的数据包未接送成功时,请求发送方重新发送该数据包。另外,通过设置重发策略,对接收方未成功接收到的数据包进行重新发送。所以,本发明提供的数据传输方法一定程度上能够保证基于UDP协议进行数据传输的可靠性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于UDP协议的数据传输方法流程图;
图2为本发明实施例提供的另一种基于UDP协议的数据传输方法流程图;
图3为本发明实施例提供的另一种基于UDP协议的数据传输方法流程图;
图4为本发明实施例提供的一种基于UDP协议的数据传输系统结构示意图;
图5为本发明实施例提供的一种应用于网络游戏的基于UDP协议的数据传输系统结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本发明利用UDP协议实现网络游戏中客户端与服务器之间的数据传输,相比现有技术中利用TCP协议的实现方案,本发明提供的基于UDP协议的数据传输方法能够满足网络游戏中低延迟的数据传输需求。另外,由于UDP协 议自身的可靠性较低,本发明在传统的基于UDP协议实现数据传输的基础上进行了传输策略的改进,提供了一种既能保障数据传输可靠性,又能确保低延迟的传输速度的技术方案。
以下进行实施例具体内容的介绍。
本发明实施例提供了一种基于UDP协议的数据传输方法,参考图1,为本发明提供的一种基于UDP协议的数据传输方法流程图。其中,数据传输的发送方和接收方通过UDP协议建立连接,所述数据传输方法具体包括:
S101:所述发送方将具有同一有序标识的数据包依次放入第一发包队列中,所述具有同一有序标识的数据包分别携带表示发送顺序的序列号,所述第一发包队列用于存放具有有序标识的数据包;依次发送所述第一发包队列中的数据包。
本发明实施例提供的基于UDP协议的数据传输方法用于实现客户端与服务器之间的数据传输,具体的,可以是客户端作为发送方向作为接收方的服务器发送数据,也可以是服务器作为发送方向作为接收方的客户端发送数据。
为了保证基于UDP协议的数据传输的可靠性,本发明实施例提供的数据传输方法中可以为待发送的数据包设置有序标识,具体的,标识有同一有序标识的数据包具有关联关系。只有接收方将具有同一有序标识的数据包全部成功接收到,才能对这些数据包进行有效解析,得到的解析内容才是有意义的。另外,具有同一有序标识的数据包分别携带表示发送顺序的序列号。
实际应用中,发送方在向接收方发送具有有序标识的数据包之前,首先按照这些数据包携带的序列号,将这些数据包放入第一发包队列中,具体的,所述第一发包队列用于存放具有有序标识的数据包。其次,当发送方的发包线程检测到所述第一发包队列中存在待发送的数据包时,依次将所述第一发包队列中的数据包发送至接收方。
S102:所述接收方在接收到具有有序标识的数据包后,将所述数据包放入第一收包队列中,所述第一收包队列用于存放具有有序标识的数据包;并根据所述第一收包队列中具有同一有序标识的数据包携带的序列号,确定具有同一有序标识的数据包是否全部成功接收。
由于具有同一有序标识的数据包分别携带有表示发送顺序的序列号,所 以,接收方在接收到具有同一有序标识的数据包后,可以根据各个数据包携带的序列号对这些数据包进行检验。具体的,判断是否具有同一有序标识的数据包已经被接收方全部接收到。
举例说明,如果具有同一有序标识的数据包携带的序列号分别为1、2、3、4,那么只有在接收方将序列号为1、2、3、4的数据包全部接收到时,才能确定数据包接收成功。假如接收方只成功接收到了序列号为1、2、4的数据包,那么说明序列号为3的数据包接收失败,这种情况下,接收方在一定时间阈值内仍未接收到序列号为3的数据包,则可以直接将序列号为1、2、4的数据包丢弃。
一种优选的实现方式中,接收方向发送方返回重发请求,用于请求发送方重新发送序列号为3的数据包。
另一种优选的实施方式中,发送方在向接收方发送序列号为1、2、3、4的任意一个数据包后均开始计时,等待来自接收方分别对序列号为1、2、3、4的数据包的确认响应,所述确认响应用于通知发送方数据包接收成功。如果发送方在对序列号为3的数据包的计时达到预设的时间阈值时,未接收到来自接收方的确认响应,则所述接收方会重新发送序列号为3的数据包。
本发明实施例提供的基于UDP协议的数据传输方法,通过设置数据包的有序发送策略,接收方可以根据数据包的序列号确定数据包是否接收成功,并在携带任何一个序列号的数据包未接送成功时,请求发送方重新发送该数据包,保证了基于UDP协议的数据传输的可靠性。
本发明实施例还提供了一种基于UDP协议的数据传输方法,参考图2,为本发明实施例提供的另一种基于UDP协议的数据传输方法流程图。在上述实施例提供的图1基础上,本发明实施例还包括:
S201:所述发送方将具有可靠标识的数据包放入第二发包队列中,所述第二发包队列用于存放具有可靠标识的数据包;发送所述第二发包队列中的数据包。
本发明实施例提供的基于UDP协议的数据传输方法中,可以为待发送的数据包设置可靠标识。具体的,具有可靠标识的数据包由发送方发送至接收方 后,接收方需要在接收到该数据包时向发送方返回确认响应,以通知接收方该数据包接收成功。通过上述传输策略,保证了数据包的传输可靠性。
另外,本发明实施例利用第二发包队列存放具有可靠标识的数据包,发送方在将具有可靠标识的数据包发送之前,首先将其放入第二发包队列,并在发包线程检测到所述第二发包队列中存在待发送的数据包时,将其从所述第二发包队列中取出,并发送至接收方。
S202:所述接收方在接收到具有可靠标识的数据包后,向所述发送方返回确认响应。
S203:所述发送方在发送所述第二发包队列中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
本发明实施例提供的基于UDP协议的数据传输方法,通过设置重发策略,对接收方未成功接收到的数据包进行重新发送,保证了基于UDP协议进行数据传输的可靠性。
本发明实施例提供的基于UDP协议的数据传输方法可以应用于网络游戏中,可以是游戏客户端作为发送方向作为接收方的游戏服务器发送数据,也可以是游戏服务器作为发送方向作为接收方的游戏客户端发送数据。本发明实施例以发送方为游戏客户端,接收方为游戏服务器为例。
S301:游戏客户端与游戏服务器通过UDP协议建立连接。
本发明实施例中,游戏客户端与游戏服务器可以利用多个通道进行数据传输,所述多个通道包括第一通道和第二通道,所述第一通道用于传输具有有序标识的数据包,所述第二通道用于传输具有可靠标识的数据包。
S302:游戏客户端将具有同一有序标识的数据包依次放入第一发包队列中,所述具有同一有序标识的数据包分别携带表示发送顺序的序列号,所述第一发包队列用于存放具有有序标识的数据包;通过所述第一通道,依次发送所述第一发包队列中的数据包。
S303:游戏客户端将具有可靠标识的数据包放入第二发包队列中,所述第二发包队列用于存放具有可靠标识的数据包;并通过所述第二通道,发送所述 第二发包队列中的数据包。
S304:游戏服务器在接收到具有有序标识的数据包后,将所述数据包放入第一收包队列中,所述第一收包队列用于存放具有有序标识的数据包;并根据所述第一收包队列中具有同一有序标识的数据包携带的序列号,确定具有同一有序标识的数据包是否全部成功接收。
S305:游戏服务器在接收到具有可靠标识的数据包后,向所述发送方返回确认响应。
S306:游戏服务器在发送所述第二发包队列中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
值得注意的是,本发明实施例中各个步骤的标号不对其执行顺序进行限定。
本发明实施例还提供了一种基于UDP协议的数据传输系统,参考图4,为本发明实施例提供的一种基于UDP协议的数据传输系统结构示意图。
具体的,所述数据传输系统400包括发送方410和接收方420,所述发送方410与所述接收方420通过UDP协议建立连接。
所述发送方410,用于将具有同一有序标识的数据包依次放入第一发包队列中,所述具有同一有序标识的数据包分别携带表示发送顺序的序列号,所述第一发包队列用于存放具有有序标识的数据包;依次发送所述第一发包队列中的数据包;
所述接收方420,用于在接收到具有有序标识的数据包后,将所述数据包放入第一收包队列中,所述第一收包队列用于存放具有有序标识的数据包;并根据所述第一收包队列中具有同一有序标识的数据包携带的序列号,确定具有同一有序标识的数据包是否全部成功接收。
为了保证基于UDP协议的数据传输的可靠性,本发明实施例中的接收方420,还用于在预设的时间阈值内,所述第一收包队列中具有同一有序标识的数据包未被全部成功接收时,向所述发送方返回重发请求,所述重发请求用于请求所述发送方重新发送未被成功接收的数据包。
所述发送方420,还用于在发送所述具有同一有序标识的数据包中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
所述发送方410,还用于将具有可靠标识的数据包放入第二发包队列中,所述第二发包队列用于存放具有可靠标识的数据包;发送所述第二发包队列中的数据包;
所述接收方420,还用于在接收到具有可靠标识的数据包后,向所述发送方返回确认响应。
所述发送方410,还用于在发送所述第二发包队列中的任一数据包后开始计时,并在预设的时间阈值内未接收到来自所述接收方的确认响应后,重新发送所述数据包。
优选地,所述发送方与所述接收方利用通道进行数据传输,所述通道包括第一通道和第二通道,所述第一通道用于传输具有有序标识的数据包,所述第二通道用于传输具有可靠标识的数据包;
相应的,所述发送方410,具体用于通过所述第一通道,依次发送所述第一发包队列中的数据包;
相应的,所述发送方420,具体用于通过所述第二通道,发送所述第二发包队列中的数据包。
本发明实施例提供的基于UDP协议的数据传输系统可以应用于网络游戏中,发送方和接收方既可以是游戏客户端也可以是游戏服务器,如图5,为本发明实施例提供的一种应用于网络游戏的基于UDP协议的数据传输系统结构示意图。
本发明实施例提供的基于UDP协议的数据传输系统,通过设置数据包的有序发送策略,接收方可以根据数据包的序列号确定数据包是否接收成功,并在携带任何一个序列号的数据包未接送成功时,请求发送方重新发送该数据包。另外,通过设置重发策略,对接收方未成功接收到的数据包进行重新发送。所以,本发明实施例提供的数据传输方法保证了基于UDP协议进行数据传输的可靠性。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明实施例所提供的一种基于UDP协议的数据传输方法及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。