CN109298943A - 用于udp服务器的并发处理方法 - Google Patents
用于udp服务器的并发处理方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/505—Allocation 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服务器是顺序迭代的,服务器等待客户端请求,然后读取请求,处理请求,发回响应。但是当处理客户端请求需要很长时间,就需要考虑某种形式的并发。
当使用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标志。
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)
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)
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通信方法、装置和存储设备 |
-
2018
- 2018-10-11 CN CN201811185295.9A patent/CN109298943A/zh active Pending
Patent Citations (4)
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)
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)
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 |