CN111614694B - 通信方法、装置及电子设备和计算机可读存储介质 - Google Patents
通信方法、装置及电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111614694B CN111614694B CN202010475321.2A CN202010475321A CN111614694B CN 111614694 B CN111614694 B CN 111614694B CN 202010475321 A CN202010475321 A CN 202010475321A CN 111614694 B CN111614694 B CN 111614694B
- Authority
- CN
- China
- Prior art keywords
- connection
- type
- protocol type
- target connection
- address information
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/03—Protocol definition or specification
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/18—Multiprotocol handlers, e.g. single devices capable of handling multiple protocols
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种通信方法、装置、系统及一种电子设备和计算机可读存储介质,该方法包括:确定第二设备的地址信息和第一设备与第二设备之间通信的协议类型;基于地址信息和协议类型创建目标连接,并将目标连接的连接信息记录至协议类型对应的连接池中;其中,连接信息包括地址信息和目标连接的文件描述符;若协议类型为只写模式的UDP类型,则通过目标连接向第二设备发送第一数据包;当通过目标连接接收到来自第二设备的第二数据包时,对第二数据包进行丢包处理;其中,第一数据包和第二数据包均为UDP类型的数据包。由此可见,本申请提供的通信方法,避免了使用UDP类型的连接通信时的内存泄漏,显著降低内存占用,提升了设备性能。
Description
技术领域
本申请涉及通信技术领域,更具体地说,涉及通信方法、装置及电子设备和计算机可读存储介质。
背景技术
在相关技术中,连接池组件一般包括两种协议类型的连接池,即TCP(中文全称:传输控制协议,英文全称:Transmission Control Protocol)类型的连接池和UDP(中文全称:用户数据报协议,英文全称:User Datagram Protocol)类型的连接池。当客户端与服务端使用UDP类型的socket(套接字)连接通信时,客户端如果对服务端的回包不做处理,而服务端一直向客户端发包,则会导致客户端系统出现“内存泄漏”。
因此,如何在使用UDP类型的连接通信时,避免内存泄漏是本领域技术人员需要解决的技术问题。
发明内容
本申请的目的在于提供一种通信方法、装置及一种电子设备和一种计算机可读存储介质,避免了使用UDP类型的连接通信时的内存泄漏。
为实现上述目的,本申请第一方面提供了一种通信方法,应用于第一设备,所述方法包括:
确定第二设备的地址信息和所述第一设备与所述第二设备之间通信的协议类型;其中,所述协议类型包括TCP类型或UDP类型或只写模式的UDP类型;
基于所述地址信息和所述协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中;其中,所述连接信息包括所述地址信息和所述目标连接的文件描述符;
若所述协议类型为只写模式的UDP类型,则通过所述目标连接向所述第二设备发送第一数据包;
当通过所述目标连接接收到来自所述第二设备的第二数据包时,对所述第二数据包进行丢包处理;其中,所述第一数据包和所述第二数据包均为UDP类型的数据包。
结合本申请第一方面,在本申请第一方面的第一种实施方式中,若所述协议类型为所述只写模式的UDP类型,则所述基于所述地址信息和所述协议类型创建目标连接,包括:
基于所述地址信息创建UDP类型的连接,并将所述连接的接收缓存区的大小设置为零,以便创建只写模式的UDP类型的目标连接。
为实现上述目的,本申请第二方面提供了一种通信装置,应用于第一设备,所述第一设备与第二设备通过目标连接进行通信,所述装置包括:
确定模块,用于确定第二设备的地址信息和所述第一设备与所述第二设备之间通信的协议类型;其中,所述协议类型包括TCP类型或UDP类型或只写模式的UDP类型;
创建模块,用于基于所述地址信息和所述协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中;其中,所述连接信息包括所述地址信息和所述目标连接的文件描述符;
发送模块,用于若所述协议类型为只写模式的UDP类型,则通过所述目标连接向所述第二设备发送第一数据包;
丢包模块,用于当通过所述目标连接接收到来自所述第二设备的第二数据包时,对所述第二数据包进行丢包处理;其中,所述第一数据包和所述第二数据包均为UDP类型的数据包。
结合本申请第二方面,在本申请第二方面的第一种实施方式中,若所述协议类型为所述只写模式的UDP类型,则所述创建模块包括:
创建单元,用于基于所述地址信息创建UDP类型的连接,并将所述连接的接收缓存区的大小设置为零,以便创建只写模式的UDP类型的目标连接;
记录单元,用于将所述目标连接的连接信息记录至所述协议类型对应的连接池中。
为实现上述目的,本申请第三方面提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述通信方法的步骤。
为实现上述目的,本申请第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述通信方法的步骤。
通过以上方案可知,本申请提供的一种通信方法,包括:确定第二设备的地址信息和所述第一设备与所述第二设备之间通信的协议类型;其中,所述协议类型包括TCP类型或UDP类型或只写模式的UDP类型;基于所述地址信息和所述协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中;其中,所述连接信息包括所述地址信息和所述目标连接的文件描述符;若所述协议类型为只写模式的UDP类型,则通过所述目标连接向所述第二设备发送第一数据包;当通过所述目标连接接收到来自所述第二设备的第二数据包时,对所述第二数据包进行丢包处理;其中,所述第一数据包和所述第二数据包均为UDP类型的数据包。
本申请提供的通信方法,为第一设备与第二设备之间的通信新增了一种协议类型,即只写模式的UDP类型。对于创建目标连接的第一设备来说,若该目标连接为只写模式的UDP类型,只允许向目标连接写入数据,而不允许从目标连接中读取数据,即只允许通过目标连接发送数据包,而不允许通过目标连接接收数据包。对于通过目标连接接收到的数据包进行内存限制,即进行丢包处理,通过目标连接接收到的数据包不会一直积压在本机中,避免了多余的数据包对操作系统内存空间的占用,从而避免了本机可用内存一直减少,避免了内存泄漏。由此可见,本申请提供的通信方法,避免了使用UDP类型的连接通信时的内存泄漏,显著降低内存占用,提升了设备性能。本申请还公开了一种通信装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为本申请实施例提供的一种通信系统的架构图;
图2为本申请实施例提供的第一种通信方法的流程图;
图3为本申请实施例提供的第二种通信方法的流程图;
图4为本申请实施例提供的第三种通信方法的流程图;
图5为本申请实施例提供的第四种通信方法的流程图;
图6为本申请实施例提供的第四种通信方法的流程图;
图7为本申请实施例提供的一种通信装置的结构图;
图8为本申请实施例提供的一种电子设备的结构图。
具体实施方式
本申请的申请人经研究发现,在默认情况下,socket的通信方式为全双工,即对于socket的创建方来说,既可以发送数据包也可以接收数据包。TCP类型的socket提供了shutdown()这一API(中文全称:应用程序接口,英文全称:Application ProgrammingInterface)可以将socket设置为半双工,即对于socket的创建方来说,只可以发送数据包或者只可以接收数据包。但是对于UDP类型的socket,内核并没有提供类似的API。对于全双工状态的UDP socket,若通信的发起方不关注对端的回包,用户态进程不会对socket接收缓存区中的回包进行读取,则会导致本端的内存泄露。
因此,在本申请中,为设备之间的通信新增了一种协议类型,即只写模式的UDP类型。对于通信的发起方即socket的创建方来说,若该socket为只写模式的UDP类型,只允许向其写入数据,而不允许从其中读取数据,即只允许通过socket发送数据包,而不允许通过socket接收数据包。对于通过该连接接收到的数据包均进行丢包处理,数据包不会一直积压在本机中,避免了本机可用内存一直减少,避免了内存泄漏。
对于对接收到的数据包进行丢包处理,本申请提供了两种可行的实施方式。在第一种可行的实施方式中,在创建socket时,对socket的接收缓冲区进行内存限制,即调用setsockopt()这一API将其接收缓冲区(buffer)的大小设置为0,socket接收到的数据包无法写入接收缓冲区,会被内核直接丢弃,实现了只写模式的UDP类型的socket。在第二种可行的实施方式中,对于只写模式的UDP类型的socket,每隔预设时间段清除其接收缓存区,当预设时间段的时间间隔足够小时也可以避免内存泄露。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解本申请提供的通信方法,下面对其使用的系统进行介绍。参见图1,其示出了本申请实施例提供的一种通信系统的架构图,如图1所示,包括第一设备100和第二设备200,第一设备100与第二设备200之间利用连接池组件300中的连接进行通信。
其中,第一设备100和第二设备200为任意需要通信的实体设备,第一设备100为通信的发起方,即连接的创建方。例如,第一设备100可以为客户端,第二设备200可以为服务器,本实施例为客户端与服务器的通信系统。又如,第一设备100和第二设备200可以均为服务器,本实施例为两个服务器之间的通信系统。
连接池组件300用于记录中每个连接的连接信息,其中包括TCP、UDP、WUDP(中文全称:只写模式的用户数据报协议,英文全称:Write only mode UDP)三种协议类型的连接,基于连接池组件可以实现连接的复用。
本申请实施例公开了一种通信方法,避免了使用UDP类型的连接通信时的内存泄漏。
参见图2,本申请实施例提供的第一种通信方法的流程图,如图2所示,包括:
S101:第一设备确定第二设备的地址信息和第一设备与第二设备之间通信的协议类型;
其中,所述协议类型包括TCP类型或UDP类型或只写模式的UDP类型;
在本实施例,第一设备为通信的发起方,发起与第二设备的通信连接,用户可以基于通信需求选择协议类型。本实施例提供三种协议类型,即TCP类型、UDP类型和只写模式的UDP类型(即WUDP类型),对于UDP类型,若不关注第二设备的回包,则可以选择WUDP类型。
S102:第一设备基于地址信息和协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中;
其中,所述连接信息包括所述地址信息和所述目标连接的文件描述符;
在本步骤中,第一设备基于第二设备的地址信息和通信的协议类型创建目标连接,以便实现第一设备与第二设备的通信。此处的目标连接可以具体为socket连接,第一设备可以通过write()函数将需要发送至第二设备的数据包写入socket连接的发送缓冲区,以实现数据包的发送;通过read()函数从socket连接的接收缓存区中读取第二设备的回复数据包,从而实现数据包的接收。TCP类型的连接用于发送或接收TCP类型的数据包,UDP类型的连接用于发送或接收UDP类型的数据包,WUDP类型的连接仅支持发送UDP类型的数据包,而不支持接收数据包。
在具体实施中,对于相同的通信需求,第一设备首次网络请求时需要创建连接并将连接信息添加至连接池中。也就是说,为了实现目标连接的复用,创建目标连接后将目标连接的连接信息记录至连接池中,此处的连接信息可以包括对端即第二设备的地址信息、目标连接的文件描述符、协议类型等,第二设备的地址信息可以包括第二设备的IP(中文全称:网际互连协议,英文全称:Internet Protocol)地址和端口。可以理解的是,在连接池组件中,可以基于协议类型划分不同的连接池,即将不同协议类型的连接的连接信息记录至不同的连接池中。在复用连接时,在对应的协议类型的连接池中进行查找,可以提高查找效率,进而提高设备间的通信效率。
S103:若协议类型为只写模式的UDP类型,则第一设备通过目标连接向第二设备发送第一数据包;其中,第一数据包为UDP类型的数据包;
S104:第二设备通过目标连接向第一设备发送第二数据包;其中,第二数据包为UDP类型的数据包;
S105:第一设备对第二数据包进行丢包处理。
在具体实施中,第一设备与第二设备利用目标连接进行通信。对于WUDP类型的连接,第一设备向第二设备发送UDP类型的数据包,对于第二设备的回包进行丢包处理。第二设备的数据包不会一直积压在第一设备中,避免了第一设备可用内存一直减少,避免了第一设备的内存泄漏。可见,对于不关注对端回包的通信需求,可以选择WUDP类型的连接,以避免内存泄露。
本申请实施例提供的通信方法,为第一设备与第二设备之间的通信新增了一种协议类型,即只写模式的UDP类型。对于创建目标连接的第一设备来说,若该目标连接为只写模式的UDP类型,只允许向目标连接写入数据,而不允许从目标连接中读取数据,即只允许通过目标连接发送数据包,而不允许通过目标连接接收数据包。对于通过目标连接接收到的数据包进行内存限制,即进行丢包处理,通过目标连接接收到的数据包不会一直积压在本机中,避免了多余的数据包对操作系统内存空间的占用,从而避免了本机可用内存一直减少,避免了内存泄漏。由此可见,本申请实施例提供的通信方法,避免了使用UDP类型的连接通信时的内存泄漏,显著降低内存占用,提升了设备性能。
本申请实施例公开了一种通信方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的,本实施例将以通信的发起方,即目标连接的创建方第一设备为执行主体进行详细介绍。
参见图3,本申请实施例提供的第二种通信方法的流程图,如图3所示,包括:
S201:确定第二设备的地址信息和第一设备与第二设备之间通信的协议类型;其中,协议类型包括TCP类型或UDP类型或只写模式的UDP类型;
在本实施例中,提供了TCP、UDP和WUDP三种协议类型的连接,并在连接池组件中独立维护TCP、UDP和WUDP三种协议类型对应的连接池。
S202:基于地址信息在协议类型对应的连接池中进行查找,以便判断连接池中是否存在目标连接;若是,则进入S204;若否,则进入S203;
在本实施例中,连接池中记录着属于该连接池对应的协议类型的连接的连接信息。第一设备需要与第二设备进行通信时,首先判断第一设备与第二设备之间是否存在符合上一步骤确定的协议类型的连接,即判断连接池组件中是否存在目标连接。
需要说明的是,本实施例中的连接池可以包括map结构的连接池或hash结构的连接池,在此不进行具体限定。底层数据结构可以为红黑树,在连接池中的连接信息众多的情况下,实现目标连接的快速查找。若协议类型对应的连接池为map结构的连接池,则基于地址信息在协议类型对应的连接池中进行查找的步骤可以包括:利用地址信息和协议类型生成目标连接的key值;基于key值在连接池的map结构中进行查找。可以理解的是,map结构的key值可以为按照一定规则生成的64位的整数,查找连接池中某个连接的信息时,需要基于key值进行查找。在具体实施中,可以通过移位和加法将地址信息和协议类型进行整合,以便生成目标连接的key值。即将协议类型和地址信息中的IP地址均转换为整数,与端口进行拼接整合到64位整数之中。设备每次需要进行远程通信时,均按照上述规则生成连接的key值,在连接池中按照key值进行查找,以便判断连接池组件中是否存在目标连接。
S203:基于地址信息和协议类型创建目标连接,将目标连接的连接信息记录至协议类型对应的连接池中,并进入S204;其中,连接信息包括地址信息和目标连接的文件描述符;
S204:通过目标连接与第二设备进行通信。
在具体实施中,基于地址信息在协议类型对应的连接池中进行查找,若存在查找结果,则说明目标连接已创建,可以复用目标连接实现第一设备与第二设备之间的通信,若无查找结果,则说明第一设备首次网络请求,需要创建目标连接,以实现第一设备与第二设备之间的通信。
若协议类型为只写模式的UDP类型,则通过目标连接向第二设备发送第一数据包,当通过目标连接接收到来自第二设备的第二数据包时,对第二数据包进行丢包处理;其中,第一数据包和第二数据包均为UDP类型的数据包。
由此可见,在本实施例中,连接池组件独立维护了TCP、UDP、WUDP三种协议类型的连接池,连接池中记录了符合该连接池对应的协议类型的连接的连接信息,基于连接池中记录的连接信息可以实现连接的复用,提高了设备间的通信效率。
本申请实施例公开了一种通信方法,相对于第一个实施例,本实施例对技术方案作了进一步的说明和优化。具体的,本实施例将以通信的发起方,即目标连接的创建方第一设备为执行主体进行详细介绍。
参见图4,本申请实施例提供的第三种通信方法的流程图,如图4所示,包括:
S301:确定第二设备的地址信息和第一设备与第二设备之间通信的协议类型,并基于地址信息和协议类型创建目标连接;
S302:若协议类型为只写模式的UDP类型,则通过目标连接向第二设备发送第一数据包;其中,第一数据包为UDP类型的数据包;
S303:通过目标连接接收到来自第二设备的第二数据包,每隔预设时间段清除目标连接的接收缓存区,以便对存储于接收缓冲区中的第二数据包进行丢包处理;其中,第二数据包为UDP类型的数据包。
在本实施例中,对于WUDP类型的socket,每隔预设时间段清除其接收缓存区,相当于每隔预设时间段对存储与接收缓冲区中来自于第二设备的第二数据包进行丢包处理,当预设时间段的时间间隔足够小时,可以避免内存泄露。
本申请实施例公开了一种通信方法,相对于第一个实施例,本实施例对技术方案作了进一步的说明和优化。具体的,本实施例将以通信的发起方,即目标连接的创建方第一设备为执行主体进行详细介绍。
参见图5,本申请实施例提供的第四种通信方法的流程图,如图5所示,包括:
S401:确定第二设备的地址信息和第一设备与第二设备之间通信的协议类型;
S402:若协议类型为只写模式的UDP类型,则基于地址信息创建UDP类型的连接,并将连接的接收缓存区的大小设置为零,以便创建只写模式的UDP类型的目标连接;
在本实施例中,通过对socket的接收缓冲区进行内存限制实现对第二数据包的丢包处理。可以理解的是,socket默认的接收缓冲区的大小为8M,在本实施例中,若需要创建的目标连接的协议类型为WUDP,则首先创建UDP类型的连接,其次调用setsockopt()这一API将连接的接收缓存区的大小设置为零,可以实现通过该连接接收到的数据包无法写入接收缓冲区,直接被内核丢弃,实现了只写模式的UDP类型,进而实现了对接收到的数据包的丢包处理,避免了内存泄露。
S403:通过目标连接向第二设备发送第一数据包;其中,第一数据包为UDP类型的数据包;
S404:当通过目标连接接收到来自第二设备的第二数据包时,对第二数据包进行丢包处理;其中,第二数据包为UDP类型的数据包。
由此可见,对于WUDP类型的连接,本实施例通过将其接收缓冲区的大小设置为最小值来防止网络报文积压进而导致内存占用陡增,业务侧使用连接池组件时,如果不关注对端回包,则可以使用WUDP类型的连接。
本申请实施例公开了一种通信方法,相对于前几个实施例,本实施例对技术方案作了进一步的说明和优化。具体的,本实施例将以通信的发起方,即目标连接的创建方第一设备为执行主体进行详细介绍。
参见图6,本申请实施例提供的第五种通信方法的流程图,如图6所示,包括:
S501:确定第二设备的地址信息和第一设备与第二设备之间通信的协议类型;
S502:基于地址信息在协议类型对应的连接池中进行查找,以便判断连接池中是否存在目标连接;若是,则进入S505;若否,则进入S503;
S503:若协议类型为只写模式的UDP类型,则基于地址信息创建UDP类型的连接,并将连接的接收缓存区的大小设置为零,以便创建只写模式的UDP类型的目标连接;
S504:将目标连接的连接信息记录至协议类型对应的连接池中;其中,连接信息包括地址信息和目标连接的文件描述符;
S505:通过目标连接向第二设备发送第一数据包;其中,第一数据包为UDP类型的数据包;
S506:当通过目标连接接收到来自第二设备的第二数据包时,对第二数据包进行丢包处理;其中,第二数据包为UDP类型的数据包。
由此可见,在本实施例中,为第一设备与第二设备之间的通信新增了一种协议类型,即WUDP类型。对于创建目标连接的第一设备来说,若该目标连接为WUDP类型,则将目标连接的接收缓冲区的大小设置为零,只允许通过目标连接发送数据包,而不允许通过目标连接接收数据包。对于通过目标连接接收到的数据包无法写入接收缓冲区,直接被内核丢弃,通过目标连接接收到的数据包不会一直积压在本机中,避免了本机可用内存一直减少,避免了内存泄漏。同时,连接池组件独立维护了TCP、UDP、WUDP三种协议类型的连接池,基于连接池中记录的连接信息可以实现连接的复用,提高了设备间的通信效率。
为了便于理解,结合本申请的一种应用场景进行介绍。结合图1,本申请提供的通信方法可以应用于全民K歌国际版(wesing)中,全民K歌国际版是一个享誉亚洲的歌唱平台,有数千万注册用户,每月活跃用户达数百万。在这个产品内,用户可以发表演唱、视频,以及与好友发消息等方式进行互动,很多实时性的交互、复杂的功能,这些都需要强大的后台服务支撑,要求后台服务高可用、高性能、低成本。
因此,全民K歌国际版的后台服务器需要减少机器宕机次数和宕机持续时间,需要降低内存占用以提升机器性能。图1中的第一设备100在本实施例中即为后台服务器,后台服务器需要与其他设备进行通信时,可以选择socket的协议类型,支持TCP、UDP、WUDP三种协议类型。对于WUDP类型的socket,在创建时调用setsockopt()这一API将其接收buffer设置为0,socket接收到报文无法写入接收buffer的,会被后台服务器内核直接丢弃,避免了后台服务器的内存泄露。
经实验表明,采用上述通信方式,全民K歌国际版的后台服务器有效避免了内存泄露,运行状况良好,没有引入其他不良影响。
同时本申请提供的技术方案也已经在实际的互联网后台中得到大规模的应用与验证,对于互联网行业、通信软件等行业,具有很高的借鉴和实用意义。
下面对本申请实施例提供的一种通信装置进行介绍,下文描述的一种通信装置与上文描述的一种通信方法可以相互参照。
参见图7,本申请实施例提供的一种通信装置的结构图,如图7所示,包括:
确定模块701,用于确定第二设备的地址信息和所述第一设备与所述第二设备之间通信的协议类型;其中,所述协议类型包括TCP类型或UDP类型或只写模式的UDP类型;
创建模块702,用于基于所述地址信息和所述协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中;其中,所述连接信息包括所述地址信息和所述目标连接的文件描述符;
发送模块703,用于若所述协议类型为只写模式的UDP类型,则通过所述目标连接向所述第二设备发送第一数据包;
丢包模块704,用于当通过所述目标连接接收到来自所述第二设备的第二数据包时,对所述第二数据包进行丢包处理;其中,所述第一数据包和所述第二数据包均为UDP类型的数据包。
本申请实施例提供的通信装置,为第一设备与第二设备之间的通信新增了一种协议类型,即只写模式的UDP类型。对于创建目标连接的第一设备来说,若该目标连接为只写模式的UDP类型,只允许向目标连接写入数据,而不允许从目标连接中读取数据,即只允许通过目标连接发送数据包,而不允许通过目标连接接收数据包。对于通过目标连接接收到的数据包进行内存限制,即进行丢包处理,通过目标连接接收到的数据包不会一直积压在本机中,避免了多余的数据包对操作系统内存空间的占用,从而避免了本机可用内存一直减少,避免了内存泄漏。由此可见,本申请实施例提供的通信装置,避免了使用UDP类型的连接通信时的内存泄漏,显著降低内存占用,提升了设备性能。
在上述实施例的基础上,作为一种优选实施方式,所述创建模块702包括:
判断单元,用于基于所述地址信息在所述协议类型对应的连接池中进行查找,以便判断所述连接池中是否存在所述目标连接;若是,则启动通信单元的工作流程;若否,则启动创建单元的工作流程;
通信单元,用于通过所述目标连接与所述第二设备进行通信;
创建单元,用于基于所述地址信息和所述协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中。
在上述实施例的基础上,作为一种优选实施方式,所述协议类型对应的连接池包括map结构的连接池或hash结构的连接池;
若所述协议类型对应的连接池为map结构的连接池,则所述判断单元包括:
生成子单元,用于利用所述地址信息和所述协议类型生成所述目标连接的key值;
查找子单元,用于基于所述key值在所述连接池的map结构中进行查找,以便判断所述连接池中是否存在所述目标连接。
在上述实施例的基础上,作为一种优选实施方式,所述生成子单元具体为通过移位和加法将所述地址信息和所述协议类型进行整合,以便生成所述目标连接的key值的单元。
在上述实施例的基础上,作为一种优选实施方式,若所述协议类型为所述只写模式的UDP类型,则所述创建模块702包括:
创建单元,用于基于所述地址信息创建UDP类型的连接,并将所述连接的接收缓存区的大小设置为零,以便创建只写模式的UDP类型的目标连接;
记录单元,用于将所述目标连接的连接信息记录至所述协议类型对应的连接池中。
在上述实施例的基础上,作为一种优选实施方式,所述丢包模块703具体为每隔预设时间段清除所述目标连接的接收缓存区,以便对存储于所述接收缓冲区中的第二数据包进行丢包处理的模块。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成。本申请还提供了一种电子设备,参见图8,本申请实施例提供的一种电子设备80的结构图,如图8所示,可以包括处理器81和存储器82。
其中,处理器81可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器81可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器81也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器81可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器81还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器82可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器82还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器82至少用于存储以下计算机程序821,其中,该计算机程序被处理器81加载并执行之后,能够实现前述任一实施例公开的由第一设备侧执行的通信方法中的相关步骤。另外,存储器82所存储的资源还可以包括操作系统822和数据823等,存储方式可以是短暂存储或者永久存储。其中,操作系统822可以包括Windows、Unix、Linux等。
在一些实施例中,电子设备80还可包括有显示屏83、输入输出接口84、通信接口85、传感器86、电源87以及通信总线88。
当然,图8所示的电子设备的结构并不构成对本申请实施例中电子设备的限定,在实际应用中电子设备可以包括比图8所示的更多或更少的部件,或者组合某些部件。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述任一实施例第一设备所执行的通信方法的步骤。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (9)
1.一种通信方法,其特征在于,应用于第一设备,所述方法包括:
确定第二设备的地址信息和所述第一设备与所述第二设备之间通信的协议类型;
基于所述地址信息和所述协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中;其中,所述连接信息包括所述地址信息和所述目标连接的文件描述符;
若所述协议类型为只写模式的UDP类型,则通过所述目标连接向所述第二设备发送第一数据包;
当通过所述目标连接接收到来自所述第二设备的第二数据包时,对所述第二数据包进行丢包处理;其中,所述第一数据包和所述第二数据包均为UDP类型的数据包;
其中,若所述协议类型为只写模式的UDP类型,则所述基于所述地址信息和所述协议类型创建目标连接,包括:
基于所述地址信息创建UDP类型的连接,并将所述连接的接收缓存区的大小设置为零,以便创建只写模式的UDP类型的目标连接。
2.根据权利要求1所述通信方法,其特征在于,所述基于所述地址信息和所述协议类型创建目标连接之前,还包括:
基于所述地址信息在所述协议类型对应的连接池中进行查找,以便判断所述连接池中是否存在所述目标连接;
若是,则通过所述目标连接与所述第二设备进行通信;
若否,则执行所述基于所述地址信息和所述协议类型创建目标连接的步骤。
3.根据权利要求2所述通信方法,其特征在于,所述协议类型对应的连接池包括map结构的连接池或hash结构的连接池;
若所述协议类型对应的连接池为map结构的连接池,则所述基于所述地址信息在所述协议类型对应的连接池中进行查找,包括:
利用所述地址信息和所述协议类型生成所述目标连接的key值;
基于所述key值在所述连接池的map结构中进行查找。
4.根据权利要求3所述通信方法,其特征在于,所述利用所述地址信息和所述协议类型生成所述目标连接的key值,包括:
通过移位和加法将所述地址信息和所述协议类型进行整合,以便生成所述目标连接的key值。
5.根据权利要求1至4中任一项所述通信方法,其特征在于,对所述第二数据包进行丢包处理,包括:
每隔预设时间段清除所述目标连接的接收缓存区,以便对存储于所述接收缓存区中的第二数据包进行丢包处理。
6.一种通信装置,其特征在于,应用于第一设备,所述第一设备与第二设备通过目标连接进行通信,所述装置包括:
确定模块,用于确定第二设备的地址信息和所述第一设备与所述第二设备之间通信的协议类型;
创建模块,用于基于所述地址信息和所述协议类型创建目标连接,并将所述目标连接的连接信息记录至所述协议类型对应的连接池中;其中,所述连接信息包括所述地址信息和所述目标连接的文件描述符;
发送模块,用于若所述协议类型为只写模式的UDP类型,则通过所述目标连接向所述第二设备发送第一数据包;
丢包模块,用于当通过所述目标连接接收到来自所述第二设备的第二数据包时,对所述第二数据包进行丢包处理;其中,所述第一数据包和所述第二数据包均为UDP类型的数据包;
其中,若所述协议类型为只写模式的UDP类型,则所述创建模块包括:
创建单元,用于基于所述地址信息创建UDP类型的连接,并将所述连接的接收缓存区的大小设置为零,以便创建只写模式的UDP类型的目标连接。
7.根据权利要求6所述通信装置,其特征在于,所述创建模块还包括:
记录单元,用于将所述目标连接的连接信息记录至所述协议类型对应的连接池中。
8.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至5任一项所述通信方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述通信方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010475321.2A CN111614694B (zh) | 2020-05-29 | 2020-05-29 | 通信方法、装置及电子设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010475321.2A CN111614694B (zh) | 2020-05-29 | 2020-05-29 | 通信方法、装置及电子设备和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111614694A CN111614694A (zh) | 2020-09-01 |
CN111614694B true CN111614694B (zh) | 2022-06-24 |
Family
ID=72201843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010475321.2A Active CN111614694B (zh) | 2020-05-29 | 2020-05-29 | 通信方法、装置及电子设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111614694B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113938531B (zh) * | 2021-09-23 | 2023-10-31 | 北京车和家信息技术有限公司 | 数据传输方法、装置、设备及介质 |
CN115865944B (zh) * | 2023-02-23 | 2023-05-30 | 苏州浪潮智能科技有限公司 | 设备间点对点通信方法、系统、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107508907A (zh) * | 2017-09-13 | 2017-12-22 | 北京明朝万达科技股份有限公司 | 一种数据传输方法及装置 |
CN110138725A (zh) * | 2019-03-26 | 2019-08-16 | 视联动力信息技术股份有限公司 | 一种数据交换方法和安全网关 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101383813A (zh) * | 2007-09-03 | 2009-03-11 | 深圳市维信联合科技有限公司 | 网络单向转发的方法及系统 |
CN101404661B (zh) * | 2008-11-20 | 2012-05-09 | 华北电力大学 | 一种基于udp协议的实时数据通讯方法 |
CN102510408B (zh) * | 2011-11-30 | 2015-01-14 | 武汉烽火网络有限责任公司 | 实现tcp应用主备热倒换的方法 |
EP2782312A4 (en) * | 2013-02-08 | 2015-04-08 | Huawei Tech Co Ltd | METHOD, DEVICE AND SYSTEM FOR REALIZING PRIVATE NETWORK TRAVERSATION |
CN109996250A (zh) * | 2017-12-29 | 2019-07-09 | 洛阳中科晶上智能装备科技有限公司 | 检测tcp连接状态的方法 |
CN109491247A (zh) * | 2018-11-19 | 2019-03-19 | 北京理工大学 | 一种数据驱动预测云控制方法 |
US10523549B1 (en) * | 2019-06-02 | 2019-12-31 | Cybertoka Ltd | Method and system for detecting and classifying networked devices |
-
2020
- 2020-05-29 CN CN202010475321.2A patent/CN111614694B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107508907A (zh) * | 2017-09-13 | 2017-12-22 | 北京明朝万达科技股份有限公司 | 一种数据传输方法及装置 |
CN110138725A (zh) * | 2019-03-26 | 2019-08-16 | 视联动力信息技术股份有限公司 | 一种数据交换方法和安全网关 |
Also Published As
Publication number | Publication date |
---|---|
CN111614694A (zh) | 2020-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111726399B (zh) | Docker容器安全访问方法及装置 | |
US10116746B2 (en) | Data storage method and network interface card | |
US20170272499A1 (en) | Method and device for loading webpage | |
CN106919634B (zh) | 跨应用共享数据的方法及网页浏览器 | |
CN111586164B (zh) | 远程云桌面的分享、接替、信息处理方法及电子设备 | |
CN111614694B (zh) | 通信方法、装置及电子设备和计算机可读存储介质 | |
CN111787126B (zh) | 容器创建方法、服务器及存储介质 | |
US20170171301A1 (en) | Method, device and system for load balancing configuration | |
CN103781055A (zh) | 一种数据下载方法及相关设备 | |
CN112948248B (zh) | 云计算服务中的软件调试的方法和装置 | |
CN114637703B (zh) | 数据访问装置、方法、可读介质和电子设备 | |
CN115639954A (zh) | 一种数据传输方法、装置、设备及介质 | |
CN111694639A (zh) | 进程容器地址的更新方法、装置和电子设备 | |
US20210042148A1 (en) | Dynamic insertion of variablized secrets in a pipeline integration system | |
CN111064786A (zh) | 账户标识管理方法及设备 | |
CN113422669B (zh) | 数据传输方法、装置和系统、电子设备以及存储介质 | |
CN105991683A (zh) | 数据传输方法及装置 | |
CN110740138A (zh) | 数据传输方法和装置 | |
CN114218317B (zh) | 进度信息管控方法、微服务装置、电子设备及存储介质 | |
CN115562871A (zh) | 内存分配管理的方法和装置 | |
CN106790521B (zh) | 采用基于ftp的节点设备进行分布式组网的系统及方法 | |
CN113626099B (zh) | 应用程序的启动方法、装置及电子设备 | |
CN114924826A (zh) | 基于不同的代码平台的页面融合方法、装置和设备 | |
CN111614676B (zh) | 一种登录方法、装置、设备、介质 | |
CN112839071B (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 |