CN106131162B - 一种基于iocp机制实现网络服务代理的方法 - Google Patents

一种基于iocp机制实现网络服务代理的方法 Download PDF

Info

Publication number
CN106131162B
CN106131162B CN201610508515.1A CN201610508515A CN106131162B CN 106131162 B CN106131162 B CN 106131162B CN 201610508515 A CN201610508515 A CN 201610508515A CN 106131162 B CN106131162 B CN 106131162B
Authority
CN
China
Prior art keywords
server
client
iocp
service end
request
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
Application number
CN201610508515.1A
Other languages
English (en)
Other versions
CN106131162A (zh
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.)
Guangzhou Huiruisitong Technology Co Ltd
Original Assignee
Guangzhou Huiruisitong Information Technology 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 Guangzhou Huiruisitong Information Technology Co Ltd filed Critical Guangzhou Huiruisitong Information Technology Co Ltd
Priority to CN201610508515.1A priority Critical patent/CN106131162B/zh
Publication of CN106131162A publication Critical patent/CN106131162A/zh
Application granted granted Critical
Publication of CN106131162B publication Critical patent/CN106131162B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers

Abstract

本发明公开的一种基于IOCP机制实现网络服务代理的方法,包括以下步骤:通过IOCP接入客户端的请求;代理服务端对接入的客户端请求进行过滤处理;代理服务端利用负载均衡算法将过滤后的客户端请求分发到负载最低的服务端进行处理。本发明的方法,不仅提高了终端用户的接入数量,而且提高了服务端的接入数量,根据需要可以随时进行扩展。

Description

一种基于IOCP机制实现网络服务代理的方法
技术领域
本发明涉及网络通信领域,特别涉及一种基于IOCP机制实现网络服务代理的方法。
背景技术
在信息化时代,网络通信是非常重要的,是把各种设备连接在一起的重要技术手段。随着通信规模的越来越庞大,网络中心结点的设计变得非常的重要,因为它是影响通信效率的瓶颈点。
应对多客户端的连接,可以使用同步通信+多线程的方式来应对,但这种方式存在的问题是,当每个客户端连入后在中心结点都要开启个线程,由于所有的这些线程都是处于运行状态,系统不得不在所有可运行的线程之间进行上下文切换,而线程切换是相当浪费时间的。
IOCP模型又称为完成端口模型,是Windows平台下开发高性能服务器应用的一种IO模型,它可以解决大量并发连接请求。
在计算机领域中,代理是指按照用户意愿,能够自主执行的软件模块。对应TCP/IP分层模型,代理技术可分为网络接口层代理技术,IP层代理技术,传输层代理技术和应用层代理技术。
网络代理服务器需要具备提供大量并发访问服务的能力。通过改进应用程序的性能和提高硬件性能并不能真正解决这个问题,因为单台服务器性能总是有限的,而且网络请求具有突发性,当某些重在事件发生时,网络访问就会急剧上升,从而造成网络阻塞,利用集群技术在应用系统中实现负载均衡可以较好地解决这一问题。
就目前而言,大多数应用都是使用IOCP这种机制将大量并发请求接入到系统中,但是仍存在一些缺陷,例如专利号201210575218的基于IOCP的海量终端设备接入系统提供的方法只是将海量并发请求接入,对于如何合理地分发这些请求却没有涉及。这并不能很好地满足实际的需求。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种基于IOCP机制实现网络服务代理的方法。
本发明的目的通过以下的技术方案实现:
一种基于IOCP机制实现网络服务代理的方法,包括以下步骤:
S1.通过IOCP接入客户端的请求;
S2.代理服务端对接入的客户端请求进行过滤处理;
S3.代理服务端利用负载均衡算法将过滤后的客户端请求分发到负载最低的服务端进行处理。
步骤S1中,所述客户端,在发起请求时,首先要将发送的数据按照协议规则封装成数据包,然后使用Socket中的异步发送方法将数据包发送到网络中,如果收到应答包且指示发送数据包正确则结束,否则重发。
步骤S2中,所述过滤处理是指代理服务端收到客户端发来的数据包后验证数据包的完整性,如果无误则将该数据包放入到等待队列,然后选择一个负载最低的服务端进行请求转发;否则丢弃该数据包。
步骤S3中,所述负载均衡算法为动态加权算法,代理服务端以当前的负载情况为依据,将每次每个服务节点的指标信息进行转换得到服务端的负载量,由此确定负载最低的服务端。
所述指标信息包括CPU占有率L(C1)、磁盘IO占有率L(D1)、内存占有率L(M1),则服务器的负载量L(S1)计算公式如下:
其中r1、r2、r3分别为当前服务类型下,CPU占有率L(C1)、磁盘IO占有率L(D1)、内存占有率L(M1)的重要系数。
它以系统当前的负载情况为依据,可以充分利用系统的处理能力来减少服务的响应速度,每次每个服务节点反映的是自己的各项信息,如CPU占有率L(C1)、磁盘IO占有率L(D1)、内存占有率L(M1)。这些信息并不能代表某一节点的负载情况,所以需要一个函数将这些指标进行一次转换,得到该服务器的负载量L(S1):
因为服务类型不同,对节点的各个部分的负载影响有差异。因此,引入参数r,用以强调该类服务对各个部分的不同程度影响。比如,大文件查找服务来说,磁盘IO、内存对服务节点的速率影响较大。所以,我们可以这样调整参数r,r=[0.1,0.2,.0.3],用以表示磁盘与内存对该项服务的重要性。若当前系数不能不能很好地反映节点的负载,可以对系数不断的修正,直到找到合适的一组参数。将参数r代入上述公式并展开得:
L(S1)=0.1*L(C1)+0.2*L(D1)+0.3*L(M1) (2)。
所述代理服务端会定时去与服务端进行数据交换。代理服务端与服务端定时进行数据交换的目的是了解所有服务当前任务饱和状态,以便将客户请求发送到正确的服务端。
所述服务端收到代理服务端发来的请求之后进行处理,处理完毕后将处理结果发回给代理服务端,同时上报服务端当前的状态。
所述客户端、代理服务端、服务端采用的是C/S架构模式,客户端与代理服务端之间、代理服务端与服务端之间均通过Socket进行网络通信。
所述客户端采用微软的Winform桌面开发技术,用于实现客户端的业务逻辑,所述业务逻辑包括收发数据、数据展示、与用户进行交互;所述代理服务端采用微软的C++语言开发的Windows服务,在客户端与服务端之间充当代理角色,用于将客户的请求接入并进行相应的转发;所述服务端是基于Linux操作系统,使用C语言开发的ServerApp,用于处理代理服务端转发过来的请求。
所述客户端、代理服务端、服务端遵守相同的通信协议。本方案中的应用层是根据业务规则自行定义的协议,传输层使用的是TCP协议。
本发明与现有技术相比,具有如下优点和有益效果:
1、本发明提高了终端用户的接入数量。
2、本发明提高了服务端的接入数量,根据需要可以随时进行扩展。
3、本发明提高了服务端的利用效率。
4、本发明适用于多客户端与多服务端之间的通信。
附图说明
图1为客户端、代理服务端、服务端的布置示意图。
图2为本发明所述一种基于IOCP机制实现网络服务代理的方法的流程图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
如图1所示,本发明的部署后的结构图,整套结构分为了客户端、代理服务端、服务器端。
代理服务最包括三个最核心的功能模块:并发请求的接入、请求的过滤(保护后台服务器)、请求分发(负载均衡,提高处理效率)。
如图2所示为IOCP的使用方法步骤:
调用CreateIOCompletionPort()函数创建一个完成端口,而且在一般情况下只需要建立这一个完成端口。
根据系统中有多少个处理器,就建立多少个工作者线程,这几个线程是专门用来和客户端、服务端进行通信的。
创建一个用于监听的Socket,绑定到完成端口上,然后开始在指定的端口上监听连接请求。
在上面这个监听Socket上投递AcceptEx请求。
工作者线程的任务是处理具体的通信事务,它会去监听完成端口的队列中是否有完成的网络操作,一旦完成端口上出现了已完成的I/O请求,那么等待的线程会被立刻唤醒,处理到来的操作。
当收到Accept通知时,和普通的Socket通讯方式一样需要做三件事情:先要为新连入的连接分配一个Socket,然后在这个Socket上投递第一个异步的发送与接收请求,完成之后继续监听。在此过程中会记录新连入Socket的Ip与端口号。
当收到Recv通知时,根据自定义协议规则去判断出当前操作的类型,如果是请求解密,工作者线程会在缓存中查找一个空闲的解密机进行发送;如果请求是上报任务结果,工作者线程会提取出相应的客户端信息然后进行转发;如果是上报当前服务状况,工作者线程会将上报的信息更新到缓存中。
关闭完成端口,释放所有资源。
负载均衡的核心部分是负载均衡算法,它的主要工作是将任务合理地分配到服务节点上,使服务节点比较均衡地承担任务,从而实现整个系统的负载平衡性,提高系统的处理能力和服务质量。
每个服务节点发送给代理服务器的消息结构如下:
Typedef struct tagSERVERINFO
{
Char szIp[16];//服务节点的IP地址
DWORD dwLastTime;//代理服务器收到这些信息的时间
UINT fUsges;//服务节点的使用率
}
代理服务器保存一个全局的链表,称之为服务节点信息链表,链表中每个节点都是上述的一个数据结构,表示当前所有可用的服务节点信息,这此信息会被时实更新,根据这些信息采用合适的算法计算出当前负载最小的节点。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (7)

1.一种基于IOCP机制实现网络服务代理的方法,其特征在于,包括以下步骤:
S1.通过IOCP接入客户端的请求;
S2.代理服务端对接入的客户端请求进行过滤处理;
所述过滤处理是指代理服务端收到客户端发来的数据包后验证数据包的完整性,如果无误则将该数据包放入到等待队列,然后选择一个负载最低的服务端进行请求转发;否则丢弃该数据包;
S3.代理服务端利用负载均衡算法将过滤后的客户端请求分发到负载最低的服务端进行处理;
所述负载均衡算法为动态加权算法,代理服务端以当前的负载情况为依据,将每次每个服务节点的指标信息进行转换得到服务端的负载量,由此确定负载最低的服务端;
所述指标信息包括CPU占有率L(C1)、磁盘IO占有率L(D1)、内存占有率L(M1),则服务器的负载量L(S1)计算公式如下:
其中r1、r2、r3分别为当前服务类型下,CPU占有率L(C1)、磁盘IO占有率L(D1)、内存占有率L(M1)的重要系数。
2.根据权利要求1所述基于IOCP机制实现网络服务代理的方法,其特征在于,步骤S1中,所述客户端,在发起请求时,首先要将发送的数据按照协议规则封装成数据包,然后使用Socket中的异步发送方法将数据包发送到网络中,如果收到应答包且指示发送数据包正确则结束,否则重发。
3.根据权利要求1所述基于IOCP机制实现网络服务代理的方法,其特征在于,所述代理服务端会定时去与服务端进行数据交换。
4.根据权利要求1所述基于IOCP机制实现网络服务代理的方法,其特征在于,所述服务端收到代理服务端发来的请求之后进行处理,处理完毕后将处理结果发回给代理服务端,同时上报服务端当前的状态。
5.根据权利要求1所述基于IOCP机制实现网络服务代理的方法,其特征在于,所述客户端、代理服务端、服务端采用的是C/S架构模式,客户端与代理服务端之间、代理服务端与服务端之间均通过Socket进行网络通信。
6.根据权利要求1所述基于IOCP机制实现网络服务代理的方法,其特征在于,所述客户端采用微软的Winform桌面开发技术,用于实现客户端的业务逻辑,所述业务逻辑包括收发数据、数据展示、与用户进行交互;所述代理服务端采用微软的C++语言开发的Windows服务,在客户端与服务端之间充当代理角色,用于将客户的请求接入并进行相应的转发;所述服务端是基于Linux操作系统,使用C语言开发的ServerApp,用于处理代理服务端转发过来的请求。
7.根据权利要求1所述基于IOCP机制实现网络服务代理的方法,其特征在于,所述客户端、代理服务端、服务端遵守相同的通信协议。
CN201610508515.1A 2016-06-29 2016-06-29 一种基于iocp机制实现网络服务代理的方法 Active CN106131162B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610508515.1A CN106131162B (zh) 2016-06-29 2016-06-29 一种基于iocp机制实现网络服务代理的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610508515.1A CN106131162B (zh) 2016-06-29 2016-06-29 一种基于iocp机制实现网络服务代理的方法

Publications (2)

Publication Number Publication Date
CN106131162A CN106131162A (zh) 2016-11-16
CN106131162B true CN106131162B (zh) 2019-06-18

Family

ID=57468839

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610508515.1A Active CN106131162B (zh) 2016-06-29 2016-06-29 一种基于iocp机制实现网络服务代理的方法

Country Status (1)

Country Link
CN (1) CN106131162B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108270732B (zh) * 2016-12-30 2019-02-19 视联动力信息技术股份有限公司 一种流媒体处理方法及系统
CN107071067B (zh) * 2017-06-13 2020-02-07 广发证券股份有限公司 一种基于Cgo的高性能证券行情接入系统和方法
CN110380991A (zh) * 2019-07-24 2019-10-25 成都甄识科技有限公司 一种IOCP机制及基于eFPGA和IOCP的物联网通信加速系统
CN111770167B (zh) * 2020-06-25 2023-02-17 武汉众邦银行股份有限公司 一种基于服务端处理能力的负载均衡算法的服务网关

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101808096A (zh) * 2010-03-22 2010-08-18 北京大用科技有限责任公司 一种大规模异地局域网间屏幕共享及控制的方法
CN102447734A (zh) * 2012-02-14 2012-05-09 浪潮齐鲁软件产业有限公司 一种税务云计算网开im在线客服系统云端服务方法
CN102571578A (zh) * 2011-12-31 2012-07-11 青岛海尔软件有限公司 一种采用完全端口技术实现50万用户在线通讯的方法
CN103037011A (zh) * 2012-12-26 2013-04-10 泉州豪杰信息科技发展有限公司 基于iocp的海量终端设备接入系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101808096A (zh) * 2010-03-22 2010-08-18 北京大用科技有限责任公司 一种大规模异地局域网间屏幕共享及控制的方法
CN102571578A (zh) * 2011-12-31 2012-07-11 青岛海尔软件有限公司 一种采用完全端口技术实现50万用户在线通讯的方法
CN102447734A (zh) * 2012-02-14 2012-05-09 浪潮齐鲁软件产业有限公司 一种税务云计算网开im在线客服系统云端服务方法
CN103037011A (zh) * 2012-12-26 2013-04-10 泉州豪杰信息科技发展有限公司 基于iocp的海量终端设备接入系统

Also Published As

Publication number Publication date
CN106131162A (zh) 2016-11-16

Similar Documents

Publication Publication Date Title
JP6506827B2 (ja) トラフィックディレクタ環境におけるトラフィックのアクティブ−パッシブルーティングおよび制御のためのシステムおよび方法
US11522734B2 (en) Method for controlling a remote service access path and relevant device
US9307017B2 (en) Member-oriented hybrid cloud operating system architecture and communication method thereof
US7274706B1 (en) Methods and systems for processing network data
CN106131162B (zh) 一种基于iocp机制实现网络服务代理的方法
JP5485993B2 (ja) サービスのロードバランシング
Laufer et al. Climb: Enabling network function composition with click middleboxes
CN110177118A (zh) 一种基于rdma的rpc通信方法
CN108494817A (zh) 数据传输方法、相关装置及系统
US7984181B2 (en) Routing incoming call requests
WO2020019743A1 (zh) 流量控制方法及装置
WO2022032984A1 (zh) 一种mqtt协议仿真方法及仿真设备
CN112631788B (zh) 数据传输方法及数据传输服务器
CN103873523A (zh) 客户端集群访问方法及装置
WO2013152565A1 (zh) 能力聚合开放的方法和系统
JP2009123201A (ja) データを処理するためのサーバ‐プロセッサ・ハイブリッド・システムおよび方法
TWI442248B (zh) 處理資料之處理器-伺服器混合系統
CN102375789A (zh) 一种通用网卡非缓存的零拷贝方法及零拷贝系统
CN105681426A (zh) 异构系统
CN114024910A (zh) 一种用于金融交易系统的极低延时可靠通讯系统及方法
CN116192863A (zh) 微服务流量处理方法、dpu服务网格部署方法及系统
CN114371935A (zh) 网关处理方法、网关、设备及介质
US11108663B1 (en) Ring control data exchange system
Zhang et al. Labeled network stack: a high-concurrency and low-tail latency cloud server framework for massive iot devices
US11431620B2 (en) Control packet transmission system

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
CP03 Change of name, title or address

Address after: 510000 no.2-8, North Street, Nancun Town, Panyu District, Guangzhou City, Guangdong Province

Patentee after: Guangzhou huiruisitong Technology Co.,Ltd.

Address before: No.2, Nancun North Street, Nancun Town, Panyu District, Guangzhou, Guangdong 511442

Patentee before: GUANGZHOU HUIRUI SITONG INFORMATION TECHNOLOGY Co.,Ltd.

CP03 Change of name, title or address
PP01 Preservation of patent right

Effective date of registration: 20230207

Granted publication date: 20190618

PP01 Preservation of patent right
PD01 Discharge of preservation of patent

Date of cancellation: 20240402

Granted publication date: 20190618