CN109298943A - 用于udp服务器的并发处理方法 - Google Patents

用于udp服务器的并发处理方法 Download PDF

Info

Publication number
CN109298943A
CN109298943A CN201811185295.9A CN201811185295A CN109298943A CN 109298943 A CN109298943 A CN 109298943A CN 201811185295 A CN201811185295 A CN 201811185295A CN 109298943 A CN109298943 A CN 109298943A
Authority
CN
China
Prior art keywords
socket
udp
client
server
epoll
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.)
Pending
Application number
CN201811185295.9A
Other languages
English (en)
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.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric 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 Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201811185295.9A priority Critical patent/CN109298943A/zh
Publication of CN109298943A publication Critical patent/CN109298943A/zh
Pending legal-status Critical Current

Links

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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明涉及UDP服务器领域,公开了一种用于UDP服务器的并发处理方法,解决UDP服务器的负载均衡问题。本发明先服务器创建UDP socket,并设置选项以及绑定本地ip地址;再创建epoll句柄,将创建的socket放入epoll,通过epoll监听socket是否可读;当有socket可读事件发生时,判断其是否是创建的socket,如果是,则调用recvfrom函数接收客户端第一个udp包,并根据recvfrom函数返回的客户端地址,创建一个新的socket,用新的socket连接客户端,并将新的socket放入epoll监听可读事件,继续监听,如果不是则当客户端socket可读时,读取数据。本发明适用于UDP服务器的并发处理。

Description

用于UDP服务器的并发处理方法
技术领域
本发明涉及UDP服务器领域,特别涉及用于UDP服务器的并发处理方法。
背景技术
大部分UDP服务器是顺序迭代的,服务器等待客户端请求,然后读取请求,处理请求,发回响应。但是当处理客户端请求需要很长时间,就需要考虑某种形式的并发。
当使用TCP时,服务器的并发处理得以简化的根源在于每个客户连接都是唯一的(不同的已连接套接字),标识每个客户连接的是一个唯一的套接字对。
然而当使用UDP时,服务端通过同一个套接字和所有的客户端进行通信,当采用并发模式时,每一个子进程共享同一个UDP套接字,因此无法简单地绑定于一个客户并为其服务。
并发的常见思路是使用多线程。服务器在读取一个新请求之后,可以交由一个线程处理,该线程在处理之后直接将响应内容发给客户端。另一方面,udp服务器和多个客户端交互,但是却没有多个socket。典型的解决方案是,服务器为每个客户端创建一个新的socket,并绑定一个新的端口。客户端以后就通过这个新的socket与服务器通信,获得响应。总结来说,udp并发服务器,针对多个客户端,可以创建多个socket;针对多个请求,可以使用多线程进行处理。
在多核服务器中,为了充分利用机器CPU资源,TCP服务器大多采用accept/fork模式,不管是预先建立进程池,还是每到一个连接创建新线程/进程,总体都是源于accept/fork的变体。然而对于UDP却无法很好的采用PMP机制,由于UDP的无连接性、无序性,它没有通信对端的信息,不知道一个数据包的前置和后续,它没有很好的办法知道,还有没后续的数据包以及如果有的话,过多久才会来,会来多久,因此UDP无法为其预先分配资源。
发明内容
本发明要解决的技术问题是:提供一种用于UDP服务器的并发处理方法,解决UDP服务器的负载均衡问题。
为解决上述问题,本发明采用的技术方案是:用于UDP服务器的并发处理方法,包括以下步骤:
步骤1:服务器创建UDP socket,并设置SO_REUSEADDR、SO_REUSEPORT选项,同时将创建的socket绑定本地ip地址;
步骤2:创建epoll句柄,将步骤1创建的socket放入epoll,通过epoll监听socket是否可读;
步骤3:当有socket可读事件发生时,判断其是否是步骤1创建的socket,如果是,则进入步骤4,否则进入步骤5;
步骤4:调用recvfrom函数接收客户端第一个udp包,并根据recvfrom函数返回的客户端地址,创建一个新的socket,用新的socket连接客户端,并将新的socket放入步骤3的epoll监听可读事件,返回步骤3;
步骤5:当客户端socket可读时,读取数据。
进一步的,步骤1和步骤4创建的socket均带有CLOEXEC标志。
本发明的有益效果是:为了充分利用多核cpu,本发明会仿照tcp服务器预先创建多个进程,每个进程创建的socket都绑定同一个端口,充分利用内核的UDP socket查找算法来达到UDP的多进程负载均衡。本发明为udp服务器建立了一个如图1所示的accept模型实现按需分配,该模型能够为每一个客户端创建一个新的udp socket,这样就成功的使用系统的多路复用机制了。
附图说明
图1是本发明用于UDP服务器的并发处理流程图。
具体实施方式
要实现多处理,那么就要改变UDP Socket查找的考虑因素,对于调用了connect的UDP Client而言,由于其具有了“连接”性,通信双方都固定下来了,那么内核就可以根据4元组完全匹配的原则来匹配。于是对于不同的通信对端,可以查找到不同的UDP Socket从而实现多处理。而对于server端,在使用SO_REUSEPORT选项,这样在进行UDP socket查找的时候,源IP地址和源端口也参与进来了。
创建套接字的时候使用SO_REUSEADDR、SO_REUSEPORT这两个socket选项后,内核会根据UDP数据包的4元组来查找本机上的所有相同目的IP地址,相同目的端口的socket中的一个socket的位置,然后以这个位置上的socket作为接收数据的socket。为了确保来自同一个客户端的UDP数据包总是被同一个socket来处理,就需要保证整个socket链表的socket所处的位置不能改变,然而,如果socket链表中间的某个socket断开的话,就会造成socket链表重新排序,这样会引发问题。于是最简单的解决方案是在整个服务生命周期中不能关闭UDP socket。要保证这一点,我们需要所有的UDP socket的创建和关闭都由一个master进行来管理,worker进程只是负责处理对于的网络IO任务,为此我们需要socket在创建的时候要带有CLOEXEC标志(SOCK_CLOEXEC)。
为了充分利用多核cpu,我们会仿照tcp服务器预先创建多个进程,每个进程创建的socket都绑定同一个端口,充分利用内核的UDP socket查找算法来达到UDP的多进程负载均衡。但是由于不能确定内核调度是完全按照我们的需要来进行负载均衡,因此我们为udp建立一个accept模型实现按需分配。然而,UDP是无连接的。它只用一个udp socket来接受所有客户端的数据,如果能够为每一个客户端创建一个新的udp socket,这样就使用系统的多路复用机制了。
综上,如图1所示,本发明用于UDP服务器的并发处理方法的方案如下:
步骤1:服务器创建UDP socket,例如图中1所示的套接字A,并设置SO_REUSEADDR、SO_REUSEPORT选项,同时将创建的socket绑定本地ip地址。为了使得在整个服务生命周期中不能关闭UDP socket,创建的socket可以带有CLOEXEC标志。
步骤2:创建epoll句柄,将步骤1创建的socket放入epoll,通过epoll监听socket是否可读。
步骤3:当有socket可读事件发生时,判断其是否是步骤1创建的socket,如果是,则进入步骤4,否则进入步骤5。
步骤4:调用recvfrom函数接收客户端第一个udp包,并根据recvfrom函数返回的客户端地址,创建一个新的socket,用新的socket连接客户端,并将新的socket放入步骤3的epoll监听可读事件,返回步骤3。同样的,为了使得在整个服务生命周期中不能关闭UDPsocket,创建的socket也可以带有CLOEXEC标志。
步骤5:当客户端socket可读时,读取数据。

Claims (2)

1.用于UDP服务器的并发处理方法,其特征在于,包括如下步骤:
步骤1:服务器创建UDP socket,并设置SO_REUSEADDR、SO_REUSEPORT选项,同时将创建的socket绑定本地ip地址;
步骤2:创建epoll句柄,将步骤1创建的socket放入epoll,通过epoll监听socket是否可读;
步骤3:当有socket可读事件发生时,判断其是否是步骤1创建的socket,如果是,则进入步骤4,否则进入步骤5;
步骤4:调用recvfrom函数接收客户端第一个udp包,并根据recvfrom函数返回的客户端地址,创建一个新的socket,用新的socket连接客户端,并将新的socket放入步骤3的epoll监听可读事件,返回步骤3;
步骤5:当客户端socket可读时,读取数据。
2.如权利要求1所述的用于UDP服务器的并发处理方法,其特征在于,步骤1和步骤4创建的socket均带有CLOEXEC标志。
CN201811185295.9A 2018-10-11 2018-10-11 用于udp服务器的并发处理方法 Pending CN109298943A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811185295.9A CN109298943A (zh) 2018-10-11 2018-10-11 用于udp服务器的并发处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811185295.9A CN109298943A (zh) 2018-10-11 2018-10-11 用于udp服务器的并发处理方法

Publications (1)

Publication Number Publication Date
CN109298943A true CN109298943A (zh) 2019-02-01

Family

ID=65162412

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811185295.9A Pending CN109298943A (zh) 2018-10-11 2018-10-11 用于udp服务器的并发处理方法

Country Status (1)

Country Link
CN (1) CN109298943A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109947581A (zh) * 2019-03-29 2019-06-28 山东浪潮云信息技术有限公司 高并发的数据传送方法及用于交换机的数据传送方法
CN110166479A (zh) * 2019-05-31 2019-08-23 深圳市瑞云科技有限公司 一种传输系统提升udp发送效率的方法
CN113132356A (zh) * 2021-03-23 2021-07-16 网宿科技股份有限公司 Udp报文的分发方法、设备及存储介质
CN113468081A (zh) * 2021-07-01 2021-10-01 福建信息职业技术学院 基于ebi总线的串口转udp的装置及方法
CN113726723A (zh) * 2020-05-26 2021-11-30 杭州萤石软件有限公司 基于udp的数据传输方法、装置及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1382145B1 (en) * 2001-04-24 2010-12-29 NVIDIA Corporation Gigabit ethernet adapter
CN103023857A (zh) * 2011-09-20 2013-04-03 腾讯科技(深圳)有限公司 一种信息资源远程部署的方法及系统
CN105812327A (zh) * 2014-12-29 2016-07-27 航天信息股份有限公司 复合型高性能多用通讯方法及系统
CN106302554A (zh) * 2016-11-08 2017-01-04 郑州云海信息技术有限公司 一种socket通信方法、装置和存储设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1382145B1 (en) * 2001-04-24 2010-12-29 NVIDIA Corporation Gigabit ethernet adapter
CN103023857A (zh) * 2011-09-20 2013-04-03 腾讯科技(深圳)有限公司 一种信息资源远程部署的方法及系统
CN105812327A (zh) * 2014-12-29 2016-07-27 航天信息股份有限公司 复合型高性能多用通讯方法及系统
CN106302554A (zh) * 2016-11-08 2017-01-04 郑州云海信息技术有限公司 一种socket通信方法、装置和存储设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
KUOSL: "CLOEXEC的作用", 《HTTPS://WWW.CNBLOGS.COM/GUOSHAOLEI/P/3946867.HTML》 *
WEIXIN_34315189: "UDP的epoll并发处理问题-解决Open***的多线程并发问题", 《HTTPS://BLOG.CSDN.NET/WEIXIN_34315189/ARTICLE/DETAILS/92919826》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109947581A (zh) * 2019-03-29 2019-06-28 山东浪潮云信息技术有限公司 高并发的数据传送方法及用于交换机的数据传送方法
CN109947581B (zh) * 2019-03-29 2021-08-27 浪潮云信息技术股份公司 高并发的数据传送方法及用于交换机的数据传送方法
CN110166479A (zh) * 2019-05-31 2019-08-23 深圳市瑞云科技有限公司 一种传输系统提升udp发送效率的方法
CN110166479B (zh) * 2019-05-31 2022-02-01 深圳市瑞云科技有限公司 一种传输系统提升udp发送效率的方法
CN113726723A (zh) * 2020-05-26 2021-11-30 杭州萤石软件有限公司 基于udp的数据传输方法、装置及设备
CN113726723B (zh) * 2020-05-26 2023-11-03 杭州萤石软件有限公司 基于udp的数据传输方法、装置及设备
CN113132356A (zh) * 2021-03-23 2021-07-16 网宿科技股份有限公司 Udp报文的分发方法、设备及存储介质
CN113468081A (zh) * 2021-07-01 2021-10-01 福建信息职业技术学院 基于ebi总线的串口转udp的装置及方法
CN113468081B (zh) * 2021-07-01 2024-05-28 福建信息职业技术学院 基于ebi总线的串口转udp的装置及方法

Similar Documents

Publication Publication Date Title
CN109298943A (zh) 用于udp服务器的并发处理方法
CN105939335B (zh) 发布-订阅数据处理环境中管理通道所有权的方法和系统
US20170134520A1 (en) Systems and methods for distributed network-aware service placement
CN105678156B (zh) 一种基于虚拟化技术的云密码服务平台及其工作流程
CA3054607C (en) Systems and methods for compute node management protocols
US9894165B2 (en) Systems and methods for decentralized service placement in a resource pool
CN108304473B (zh) 数据源之间的数据传输方法和系统
Essa et al. Mobile agent based new framework for improving big data analysis
US20200127939A1 (en) Distributed database-driven resource management and locking in a cloud native mobile core network node architecture
US11064021B2 (en) Method, device and computer program product for managing network system
CN104981781B (zh) 分布式计算系统及操作分布式计算系统的方法
Del Gaudio et al. A lightweight messaging engine for decentralized data processing in the internet of things
EP2517408A2 (en) Fault tolerant and scalable load distribution of resources
CN102158406A (zh) 面向计算机网络链路的智能选路方法
CN104270443A (zh) 一种能够动态解析Web应用的云计算系统及方法
CN106874371A (zh) 一种数据处理方法及装置
WO2016127854A1 (zh) 一种信息处理方法及装置
CN107948005A (zh) 物联网协议的更新方法及装置
Jeny et al. Flexible Data Streaming In Stream Cloud
CN103336843B (zh) 一种数据集成方法及装置
CN111614792A (zh) 透传方法、系统、服务器、电子设备及存储介质
CN103546508B (zh) 信息同步系统和方法
US10417051B2 (en) Synchronizing shared resources in an order processing environment using a synchronization component
CN109495462A (zh) 一种动态连接数据分布式系统及其数据交互方法
CN114430408B (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190201