一种基于Memcache协议的客户端异步处理方法及客户端与流程

文档序号:12595757阅读:284来源:国知局
一种基于Memcache协议的客户端异步处理方法及客户端与流程

本发明涉及网络技术领域,尤其涉及一种基于Memcache协议的客户端异步处理方法及客户端。



背景技术:

Memcache(分布式高速缓存系统)网络通信协议已经变成一个广泛通用的RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,一般的Memcache协议Server端实现了异步通信方式,目前应用比较广泛的Memcache客户端是libmemecache这个C语言实现的库或者是基于该库封装的其他语言的扩展,该客户端支持线程池连接操作和同步阻塞的方式操作,在网络瓶颈的服务中不能很好的发挥机器的优势,影响和服务器(Server)端交互的性能。而且依赖于该库在扩展方面或业务集成方面不是非常友好。

现有的技术客户端通过Libmemecached这个C语言实现的库来和Memecache协议的Server交互,在一些可以使用异步方式调用来提升性能的场景下使用将无法实现,其对于客户端交互不是异步回调的方式,会阻塞处理线程或进程,对于负责的服务在一个线程中不可能仅仅是和Memecache Server交互一个操作,这对于程序集成来说也是一个挑战。



技术实现要素:

本发明实施例提供一种基于Memcache协议的客户端异步处理方法及客户端,在同一个线程中可以异步的执行多个事件操作,在网络等待时有效地利用处理器CPU,并且降低开发成本。

一方面,本发明实施例提供了一种基于Memcache协议的客户端异步处理方法,所述方法包括:

当客户端触发一事件,需要和服务器端进行交互时,针对所述事件,执行如下操作:

创建所述事件对应的事件Event对象、Memcache协议实现对象和连接对象,并利用创建的各对象分别进行处理从而将所述事件的事件消息发送到服务器端;

将所述事件的Memcache操作回调函数注册到所述Memcache协议实现对象中;

将所述Memcache协议实现对象注册到所述连接对象中;

将所述连接对象注册到所述Event对象中;

针对所述客户端触发的其它事件重复上述步骤,并将各事件对应的注册有连接对象的Event对象构建异步Event对象集合;

对所述异步Event对象集合进行事件循环监听,当某一连接对象监听到所述服务器端针对所对应事件的事件消息的事件反馈信息时,调用对应的已注册的Memcache操作回调函数处理所述事件反馈信息。

另一方面,本发明实施例提供了一种基于Memcache协议的客户端,所述客户端包括:

创建单元,用于当客户端触发一事件,需要和服务器端进行交互时,创建所述事件对应的事件Event对象、Memcache协议实现对象和连接对象,并利用创建的各对象分别进行处理从而将所述事件的事件消息发送到服务器端;

注册单元,用于将所述事件的Memcache操作回调函数注册到所述Memcache协议实现对象中,将所述Memcache协议实现对象注册到所述连接对象中,并将所述连接对象注册到所述Event对象中;

对象集合构建单元,用于将所述客户端触发的各事件对应的注册有连接对象的Event对象构建异步Event对象集合;

循环监听单元,用于对所述异步Event对象集合进行事件循环监听,当某一连接对象监听到所述服务器端针对所对应事件的事件消息的事件反馈信息时,调用对应的已注册的Memcache操作回调函数处理所述事件反馈信息。

上述技术方案具有如下有益效果:本发明实施例提供了一种高性能异步实现Memcache协议客户端的技术方案,多个异步事件在同一个线程中共存的,异步事件和Memcache协议处理实现解耦,可以方便进行项目集成。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一种基于Memcache协议的客户端异步处理方法流程图;

图2为本发明实施例一种基于Memcache协议的客户端结构示意图;

图3为本发明实施例创建单元结构示意图;

图4为本发明应用实例一种基于Memcache协议的客户端具体实现结构示意图;

图5为本发明应用实例客户端调用流程示意图;

图6为本发明应用实例客户端事件循环监听处理流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,为本发明实施例一种基于Memcache协议的客户端异步处理方法流程图,所述方法包括:

101、当客户端触发一事件,需要和服务器端进行交互时,针对所述事件,执行如下操作:创建所述事件对应的事件Event对象、Memcache协议实现对象和连接对象,并利用创建的各对象分别进行处理从而将所述事件的事件消息发送到服务器端;

102、将所述事件的Memcache操作回调函数注册到所述Memcache协议实现对象中;

103、将所述Memcache协议实现对象注册到所述连接对象中;

104、将所述连接对象注册到所述Event对象中;

105、针对所述客户端触发的其它事件重复上述步骤,并将各事件对应的注册有连接对象的Event对象构建异步Event对象集合;

106、对所述异步Event对象集合进行事件循环监听,当某一连接对象监听到所述服务器端针对所对应事件的事件消息的事件反馈信息时,调用对应的已注册的Memcache操作回调函数处理所述事件反馈信息。

优选地,所述连接对象为套接字应用程序接口Socket API连接对象。

优选地,利用创建的所述事件对应的Memcache协议实现对象进行处理包括:利用所述事件对应的Memcache协议实现对象对所述事件进行Memcache协议解析,获取Memcache协议解析后的事件消息。

优选地,利用创建的所述事件对应的连接对象进行处理包括:利用所述事件对应的连接对象,建立所述客户端和所述服务器端之间的连接。

优选地,利用创建的所述事件对应的Event对象进行处理包括:利用所述事件对应的Event对象,将获取的所述Memcache协议解析后的事件消息,通过建立的所述客户端和所述服务器端之间的连接,发送到服务器端

如图2所示,为本发明实施例一种基于Memcache协议的客户端结构示意图,所述客户端包括:

创建单元21,用于当客户端触发一事件,需要和服务器端进行交互时,创建所述事件对应的事件Event对象、Memcache协议实现对象和连接对象,并利用创建的各对象分别进行处理从而将所述事件的事件消息发送到服务器端;

注册单元22,用于将所述事件的Memcache操作回调函数注册到所述Memcache协议实现对象中,将所述Memcache协议实现对象注册到所述连接对象中,并将所述连接对象注册到所述Event对象中;

对象集合构建单元23,用于将所述客户端触发的各事件对应的注册有连接对象的Event对象构建异步Event对象集合;

循环监听单元24,用于对所述异步Event对象集合进行事件循环监听,当某一连接对象监听到所述服务器端针对所对应事件的事件消息的事件反馈信息时,调用对应的已注册的Memcache操作回调函数处理所述事件反馈信息。

优选地,所述连接对象为套接字应用程序接口Socket API连接对象。

优选地,如图3所示,为本发明实施例创建单元结构示意图,所述创建单元21包括:Memcache协议实现对象模块211,用于利用所述事件对应的Memcache协议实现对象对所述事件进行Memcache协议解析,获取Memcache协议解析后的事件消息。

优选地,所述创建单元21还包括:连接对象模块212,用于利用所述事件对应的连接对象,建立所述客户端和所述服务器端之间的连接。

优选地,所述创建单元21还包括:Event对象模块213,用于利用所述事件对应的Event对象,将获取的所述Memcache协议解析后的事件消息,通过建立的所述客户端和所述服务器端之间的连接,发送到服务器端。

以下通过应用实例对本发明实施例上述技术方案进行详细说明:

如图4所示,为本发明应用实例一种基于Memcache协议的客户端具体实现结构示意图,本发明应用实例技术方案的Memcache客户端大致分为两层三个部分,分别是底层细节封装实现、客户端接口层实现。底层细节封装实现分为Socket封装实现、Event封装实现。Socket封装实现是对系统Socket API做的兼容性或者通用的函数处理,Event封装实现是由于多个平台的系统底层实现方式不同,通过封装对于上层调用来说是一致的,从而使得该客户端具有可移植性。客户端接口层实现是Memcache协议的客户端实现,主要是对Memcache协议的解析、连接机制、回调函数管理等功能。

Socket封装实现主要是基于系统级的Socket接口封装通用的连接对象和一些工具类库,和网络通信中常用到的通用的二进制安全缓冲Buffer类库,为网络通信模块提供了强有力的支撑。屏蔽系统级Socket的报错信息和重试操作,屏蔽了网络编程中的开发选项。增加了项目级别的日志有利于开发中调试。

Event封装实现是本发明应用实例方案实现高性能客户端的重要前提,因为相比传统的同步调用在性能上提升最大的原因就是使用了异步的I/O(输入/输出)方式处理。目前在Linux系统中提供了epoll(是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用I/O接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率)相关的系统接口,在Free BSD(一种类UNIX操作系统)系统中提供了和epoll类似的接口是kqueue,两个除了内部实现和对外接口不同外,可以实现的功能基本一致,相比kqueue更为灵活一些,但是对于常规的处理这两种异步实现都可以满足需求,所以在本方案中基于这两种方案做了异步Event的封装,但是不是所有的系统都支持上述两种接口,所以Event封装还对select、poll做了兼容性封装,保证了系统的可移植性。

用户空间和内核交互一个读写过程,当发出一个读操作后,由于网络速度和CPU的速度的不匹配,当内核读取一个数据的同时,CPU可以处理其他请求或计算,从而达到资源合理利用。

Memcache协议的客户端实现主要是负责连接管理、协议解析(分别通过连接管理模块和协议解析模块实现)。连接管理模块负责域名解析和连接失败重试机制,连接失败重试机制是在长连接服务端主动断开连接或者网络抖动导致断开后异步的重试连接的一种机制,当发现有连接异常断开后会有定时器间隔一段时间重新连接,该间隔时间假如为N,那么如果再次连接失败下次重新连接是2N后,依次类推3N,4N........这个时间也不是持续增加重试的,当到达一定的重试次数还是连接失败将回调报警接口做报警处理,重试机制是开发选项,可以在项目选择关闭。协议解析模块是当有一个读事件触发后去缓冲buffer中读取数据,该模块负责将二进制流数据通过协议解析器解析成通讯数据,该模块还负责Memcache命令操作的回调函数的注册回调管理。

如图5所示,为本发明应用实例客户端调用流程示意图,当客户端触发一事件,需要和服务器端进行交互时,针对所述事件,执行如下操作:创建所述事件对应的事件Event对象、Memcache协议实现对象和连接对象,并利用创建的各对象分别进行处理从而将所述事件的事件消息发送到服务器端,然后将Memcache操作回调函数注册到Memcache协议实现对象中,将Memcache协议实现对象注册到连接对象中,最后将连接对象注册到Event对象中,由于Event对象在整个线程中除了负责Memcache协议,与服务器端Server交互外还可能处理其他事件,所以Event单独封装。这也是为了该客户端更好的和其他组件集成。针对所述客户端触发的其它事件重复上述步骤,并将各事件对应的注册有连接对象的Event对象构建异步Event对象集合;对所述异步Event对象集合进行事件循环监听,当某一连接对象监听到所述服务器端针对所对应事件的事件消息的事件反馈信息时,调用对应的已注册的Memcache操作回调函数处理所述事件反馈信息。

如图6所示,为本发明应用实例客户端事件循环监听处理流程图,首先程序初始化上面介绍的Event对象,在初始化完成后执行事件循环监听Event Loop后,系统将监听注册的所有文件操作句柄或者定时器,Memcache协议实现对象只是事件循环的其中个别事件,用户根据情况可以继续在该线程中注册其他事件,然后当事件触发调用对应的已注册的Memcache操作回调函数进行处理,处理完成后继续等待下一个事件触发。

本发明应用实例上述技术方案具有如下有益效果:提供了一种高性能异步实现Memcache协议客户端的技术方案,多个异步事件在同一个线程中共存的,异步事件和Memcache协议处理实现解耦,可以方便进行项目集成。

应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。

在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要比清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。

为使本领域内的任何技术人员能够实现或者使用本发明,上面对所公开实施例进行了描述。对于本领域技术人员来说;这些实施例的各种修改方式都是显而易见的,并且本文定义的一般原理也可以在不脱离本公开的精神和保护范围的基础上适用于其它实施例。因此,本公开并不限于本文给出的实施例,而是与本申请公开的原理和新颖性特征的最广范围相一致。

上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrative logical block),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrative components),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1