响应消息的缓冲方法及服务器与流程

文档序号:14950597发布日期:2018-07-17 22:27阅读:211来源:国知局

本发明实施例涉及消息处理技术领域,特别涉及响应消息的缓冲方法及服务器。



背景技术:

为了提高socket响应消息发送吞吐量,需要由服务器中的处理消息请求线程把响应消息写入缓冲区,并由消息处理线程来将缓冲区中的消息发送出去,因此,既要保证消息写入到缓冲区的响应速度,又要保证缓冲区发送消息的响应速度。

目前中小企业服务器,一般的缓冲区都只是在内存中。服务器的带宽普遍在1~100m之间,网络传输速度0.12~12.5mb/s之间。而内存读写速度在1g/s以上,如果出现大量内存随机访问,导致频繁出现缺页或者页面调入调出的情况,内存随机读写速度会大大降低;若响应消息的流量较大,很容易造成服务器网络发送消息的响应速度跟不上消息增加速度,造成请求堆积、服务器无响应。

发明人发现现有技术中至少存在如下问题:目前的中小企业服务器,当出现内存缓冲区满了(网络发送速度跟不上消息增加速度)的情况时,只能停掉服务器或动态增加内存缓冲区大小,这样既影响系统的响应时间又导致系统的不稳定性,而且内存是相对昂贵资源,特别是达到一定大小后再扩容,费用相当高。



技术实现要素:

本发明实施方式的目的在于提供一种响应消息的缓冲方法及服务器,不仅提升了系统响应时间和系统稳定性,而且节约了内存成本。

为解决上述技术问题,本发明的实施方式提供了一种响应消息的缓冲方法,包括:当存在需要缓冲的响应消息时,判断预设的内存缓冲区的剩余空间是否能够存放所述响应消息;若所述内存缓冲区的剩余空间不能够存放所述响应消息,则将所述响应消息存放至预设的磁盘缓冲区。

本发明的实施方式还提供了一种服务器,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够上述响应消息的缓冲方法。

本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述响应消息的缓冲方法。

本发明实施方式相对于现有技术而言,当内存缓冲区的剩余空间不能够存放所述响应消息,则将所述响应消息存放至预设的磁盘缓冲区;即能够在内存缓冲区已满情况下,利用磁盘缓冲区对响应消息进行缓冲,而无需停掉服务器或动态增加内存缓冲区大小,从而能够在最大限度地利用设置的内存空间前提下,充分利用磁盘空间,不仅提升了系统响应时间和系统稳定性,而且节约了内存成本。

另外,所述将所述响应消息存放至预设的磁盘缓冲区,具体包括:获取所述磁盘缓冲区中的当前缓冲文件;根据预设的单文件大小阈值与所述当前缓冲文件的文件大小,计算出所述当前缓冲文件的剩余可用大小;判断所述当前缓冲文件的剩余可用大小是否能够存放所述响应消息;若所述当前缓冲文件的剩余可用大小能够存放所述响应消息,将所述响应消息存放至所述当前缓冲文件;若所述当前缓冲文件的剩余可用大小不能够存放所述响应消息,新建另一缓冲文件,并将所述另一缓冲文件设定为所述当前缓冲文件,并将所述响应消息存放至重新设定的所述当前缓冲文件。本实施例的技术方案,可以确保单个缓冲文件的大小不超过预设的单文件大小阈值,从而可以避免由于单个文件过大而可能导致的读写错误的问题。

另外,所述判断预设的内存缓冲区的剩余空间是否能够存放所述响应消息,具体包括:获取所述内存缓冲区中的当前缓冲块;判断所述当前缓冲块的剩余空间是否能够存放所述响应消息;若所述当前缓冲块的剩余空间不能够存放所述响应消息,判断所述内存缓冲区中是否存在另一缓冲块,其中所述另一缓冲块的剩余空间能够存放所述响应消息;若不存在所述另一缓冲块,则判定所述内存缓冲区的剩余空间不能够存放所述响应消息。本实施例提供了判断内存缓冲区的剩余空间是否能够存放所述响应消息的一种具体方式。

另外,所述将所述响应消息存放至所述磁盘缓冲区之后,还包括:获取所述响应消息的指针,并将所述响应消息的指针加入预设的消息队列;所述消息队列中包括多个所述响应消息的指针;在消息发送过程中,从所述消息队列中依次获取各所述响应消息的指针;根据各所述响应消息的指针获取各所述响应消息,并将获取的各所述响应消息发送出去;其中,若所述响应消息的指针指向所述磁盘缓冲区,则从所述磁盘缓冲区获取所述响应消息;若所述响应消息的指针指向所述内存缓冲区,则从所述内存缓冲区获取所述响应消息。本实施例提供了响应消息发送过程的一种具体方式。

另外,在所述将获取的各所述响应消息发送出去之后,还包括:若所述响应消息是从所述磁盘缓冲区获取的,判断所述响应消息所在的缓冲文件中的所有响应消息是否均已发送完毕;若均已发送完毕,则回收所述响应消息所在的缓冲文件。本实施例提供的技术方案,当响应消息发送完毕时,能够对磁盘缓冲区的缓冲文件进行及时回收,从而便于快速循环利用。

另外,所述回收所述响应消息所在的缓冲文件,具体包括:将所述响应消息所在的缓冲文件标记为待回收状态;定时回收被标记为待回收状态的所述缓冲文件。本实施例提供了回收磁盘缓存文件的一种具体实现方法。

附图说明

一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。

图1是根据本发明第一实施例的响应消息的缓冲方法的流程图;

图2是根据本发明第一实施例的响应消息的缓冲方法的具体流程图;

图3是根据本发明第二实施例的响应消息的缓冲方法的流程图;

图4是根据本发明第三实施例的响应消息的缓冲方法的流程图;。

图5是根据本发明第四实施例的服务器的具体流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。

本发明的第一实施方式涉及一种响应消息的缓冲方法,包括:当存在需要缓冲的响应消息时,判断预设的内存缓冲区的剩余空间是否能够存放响应消息;若内存缓冲区的剩余空间不能够存放响应消息,则将响应消息存放至预设的磁盘缓冲区。

本实施方式与现有技术相比,当内存缓冲区的剩余空间不能够存放所述响应消息,则将所述响应消息存放至预设的磁盘缓冲区;即能够在内存缓冲区已满情况下,利用磁盘缓冲区对响应消息进行缓冲,而无需停掉服务器或动态增加内存缓冲区大小,从而能够在最大限度地利用设置的内存空间前提下,充分利用磁盘空间,不仅提升了系统响应时间和系统稳定性,而且节约了内存成本。

下面对本实施方式的响应消息的缓冲方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。

本实施方式中的响应消息的缓冲方法应用于服务器,请参考图1,具体包括:

步骤101,判断是否存在需要缓存的响应消息。若是,则进入步骤102,若否,则返回步骤101。

具体而言,当服务器接收到客户端的请求信息时,会根据请求信息生成响应消息,此时服务器判定存在需要缓存的响应消息,然后进入步骤102;否则,重复执行步骤101;即可以理解为,服务器会实时检测是否存在需要缓存的响应消息,每当检测到新生成了一个响应消息时,就会判定存在需要缓存的响应消息。

步骤102,判断预设的内存缓冲区的剩余空间是否能够存放响应消息。若是,则进入步骤104;若否,则进入步骤103。

具体而言,服务器内部预设了内存缓冲区,以供缓存响应消息。服务器会判断内存缓冲区的剩余空间与响应消息所需的存放空间的大小关系,从而判断出内存缓冲区的剩余空间是否能够存放响应消息。如图2所示,本实施例中的步骤102包括多个子步骤,其中图2是本实施例较为细化的具体流程图,请同时参考图1和图2。

子步骤1021,获取内存缓冲区中的当前缓冲块。

本实施例中,内存缓冲区被预先划分成多个缓冲块,并预先设定了每个缓冲块的预设空间。服务器在对内存缓冲区进行写入操作时,会将多个缓冲块依次写满;即,服务器先获取一个缓冲块并允许对该缓冲块执行写入操作,然后将若干个响应消息存放在该缓冲块中,只有当该缓冲块存满后,服务器才获取另一个缓冲块并允许对该另一个缓冲块执行写入操作,然后向该另一个缓冲块内存放若干个响应消息,以此类推。

其中,当前缓冲块即是指当前被允许执行写入操作的缓冲块;因此,获取内存缓冲区中的当前缓冲块,即为获取内存缓冲区中的当前被允许执行写入操作的缓冲块。

需要说明的是,本实施例中,每个缓冲块的预设空间是相等的,然在其他例子中,每个缓冲块的预设空间也可以不相等;另外,本实施例是以内存缓冲区被划分成多个缓冲块的形式存放响应消息,然不限于此,凡是能够实现响应消息存放的方式均可以。

子步骤1022,判断当前缓冲块的剩余空间是否能够存放响应消息。若是,则进入步骤104;若否,则进入子步骤1023。

其中,当前缓冲块的剩余空间即为当前缓冲块的预设空间与当前缓冲块的已使用空间的差值。服务器内部对自动记录各缓冲块的已使用空间和剩余空间,当需要使用时,即可获取各缓冲块的已使用空间和剩余空间。

具体而言,服务器会判断当前缓冲块的剩余空间是否小于响应消息所需的存储空间;若当前缓冲块的剩余空间小于响应消息所需的存储空间,表示当前缓冲块不能够存放该响应消息,则需要判断是否存在另一缓冲块,其中该另一缓冲块的剩余空间能够存放响应消息(即进入子步骤1023);若当前缓冲块的剩余空间大于或等于响应消息所需的存储空间,则判定当前缓冲块的剩余空间能够存放响应消息,并将响应消息存放至当前缓冲块(即进入步骤104)。

子步骤1023,判断内存缓冲区中是否存在另一缓冲块,其中该另一缓冲块的剩余空间能够存放响应消息。若是,则进入步骤104;若否,则进入子步骤103。

即,从内存缓冲区查找是否存在另一缓冲块,其中该另一缓冲块的剩余空间能够存放响应消息。若存在该另一缓冲块,则判定内存缓冲区的剩余空间能够存放响应消息;并将该另一缓冲块设定为当前缓冲块(即对当前缓冲块进行重新设定),即进入子步骤1024,然后将响应消息存放至重新设定的该当前缓冲块中,即进入步骤104。

若不存在该另一缓冲块,即内存缓冲区中没有一个缓冲块的剩余空间能够存放响应消息,则判定内存缓冲区的剩余空间不能够存放响应消息,此时,将所述响应消息存放至预设的磁盘缓冲区,即进入步骤103。

子步骤1024,将该另一缓冲块设定为当前缓冲块。

以上是所述的步骤102的具体实现方式,只是作为一个例子进行说明,本实施例并不以此为限。

步骤103,将响应消息存放至预设的磁盘缓冲区。

具体而言,服务器内部预先配置了磁盘缓冲区。现有技术中,磁盘缓冲区通常是在将外部获取的数据写入硬盘时,起到缓冲作用;而本发明的实施例中,可以将响应消息存放至磁盘缓冲区,即磁盘缓冲区还可以对响应消息起到缓冲作用。

步骤104,将响应消息存放至内存缓冲区。

即,服务器将响应消息存放至内存缓冲区的当前缓冲块。

需要说明的是,本实施例中并没有预先对磁盘缓冲区的总的空间设定;即可以认为,只要有存放需求,就可以将响应消息存放至磁盘缓冲区。需要说明的是,在实际应用中,只有在内存缓冲区溢出(即内存缓冲区的剩余空间不足)时,才会将响应消息存放至磁盘缓冲区;并且,由于内存缓冲区中的响应消息在发送完毕时,其所占的内存空间会被及时回收,因此,内存缓冲区溢出的量可能并不会特别大,故不会占用磁盘缓冲区太大的空间。

较佳的,本实施例的响应消息的缓冲方法的实现细节中,还包括以下步骤,如图2中所示。

步骤105,获取响应消息的指针,并将响应消息的指针加入预设的消息队列;消息队列中包括多个所述响应消息的指针。

具体而言,服务器会预先设置消息队列,消息队列的数量可以根据需要设定。服务器在将响应消息存放至内存缓冲区或者磁盘缓冲区后,还要获取响应消息的指针,并把响应消息的指针(响应消息目前存放的具体地址)放入预先设定的消息队列中,以排队等到发送;其中,每个消息队列中包括多个响应消息的指针,且依次排列。

其中,当消息队列的数量为多个时,服务器可以按照预设规则将该响应消息放入某一个消息队列;该预设规则可以根据需要设定,例如,将该响应消息放入包含较少响应消息的消息队列。

步骤106,在消息发送过程中,从消息队列中依次获取各响应消息的指针。

步骤107,根据各响应消息的指针获取各响应消息,并将获取的各响应消息发送出去。

具体而言,服务器会预先创建消息处理线程,以用于将响应消息发送出去;其中,消息处理线程的数量与消息队列的数量相等,即一个消息处理线程负责一个消息队列中的响应消息的发送。

在消息发送过程中,消息处理线程按照响应消息的指针在消息队列中的排列顺序,依次获取各响应消息的指针,并根据各响应消息的指针获取各响应消息,然后将其发送出去(发送至客户端)。其中,若响应消息的指针指向磁盘缓冲区,则从磁盘缓冲区获取所述响应消息;若响应消息的指针指向内存缓冲区,则从内存缓冲区获取响应消息。

例如,消息处理线程从消息队列获取了一个响应消息的指针,如果该响应消息的指针指向磁盘缓冲区(表示该响应消息被存放在磁盘缓冲区),则消息处理线程访问磁盘缓冲区,并根据该响应消息的指针获取该响应消息;如果该响应消息的指针指向内存缓冲区(表示该响应消息被存放在内存缓冲区),则消息处理线程访问内存缓冲区,并根据该响应消息的指针获取该响应消息;然后将获取的响应消息发送出去;接着,消息处理线程从消息队列在获取下一个响应消息的指针,以此类推。

本发明的第二实施方式涉及一种响应消息的缓冲方法。第二实施方式与第一实施方式大致相同,主要区别之处在于:在第二实施方式中,提供了步骤“将响应消息存放至磁盘缓冲区”的另一种实现方式。

如图3所示,是本实施例的响应消息的缓冲方法的流程图,本实施例中的图3是在图1的基础上做出的调整,然不限于此,也可以在图2的基础上做出调整。

其中,步骤201~202、204分别与第一实施例中的步骤101~102、104大致相同,此处不再赘述。不同之处在于,第二实施例中的步骤203,还包括如下子步骤:

子步骤2031,获取磁盘缓冲区中的当前缓冲文件。

其中,服务器在磁盘缓冲区存储数据时,会创建缓冲文件,并将数据写入缓冲文件中。具体而言,本实施例中,服务器会在系统内存中预先创建磁盘缓冲区目录;当要向磁盘缓冲区存放响应消息时,服务器查询该磁盘缓冲区目录中是否存在缓存文件;若存在,则获取最新创建的缓冲文件,将其作为当前缓冲文件;若不存在,则新创建一个缓冲文件,并将其作为当前缓冲文件。

其中,当前缓冲文件即是指当前被允许执行写入操作的缓冲文件;因此,获取磁盘缓冲区中的当前缓冲文件,即为获取磁盘缓冲区中的当前被允许执行写入操作的缓冲文件。

子步骤2032,根据预设的单文件大小阈值与当前缓冲文件的文件大小,计算出当前缓冲文件的剩余可用大小。

本实施例中,服务器系统中预先设定了单文件大小阈值,即磁盘缓冲区中每个缓冲文件的最大容量;其中,该单文件大小阈值是服务器根据其系统配置自动设定的;其目的在于,防止单个缓冲文件过大而可能导致的服务器在读写时出错的问题。

服务器计算单文件大小阈值与当前缓冲文件的文件大小的差值,并将该差值作为当前缓冲文件的剩余可用大小。

子步骤2033,判断当前缓冲文件的剩余可用大小是否能够存放响应消息。若是,则直接进入子步骤2035;若否,则先进入子步骤2034,再进入子步骤2035。

具体而言,服务器会判断当前缓冲文件的剩余可用大小是否小于响应消息所需的存储空间;若当前缓冲文件的剩余可用大小小于响应消息所需的存储空间,表示假如把该响应消息存放至该当前缓冲文件,会使得该当前缓冲文件的文件大小超过预先设定的该单文件大小阈值,此时,需要新建另一缓冲文件,并将该另一缓冲文件设定为当前缓冲文件(即进入子步骤2034);若当前缓冲文件的剩余可用大小大于或等于响应消息所需的存储空间,则将响应消息存放至该当前缓冲文件(即进入子步骤2035)。

子步骤2034,新建另一缓冲文件,并将该另一缓冲文件设定为当前缓冲文件。

具体而言,服务器在磁盘缓冲区目录中重新创建另一缓冲文件,并将该另一缓冲文件设定为当前缓冲文件;然后,将响应消息存放至重新设定的该当前缓冲文件(即进入子步骤2035)。

子步骤2035,将响应消息存放至当前缓冲文件。

相较于第一实施例而言,本实施例提供了将响应消息存放至磁盘缓冲区的一种较佳的实现方式,其中限定了每个缓冲文件的最大存储容量,以避免可能由于得不到系统硬件支持而发生读写错误的问题。

本发明的第三实施方式涉及一种响应消息的缓冲方法。第三实施方式是在第二实施方式的基础上的改进,主要改进之处在于:及时检测缓冲文件中的响应消息的发送状况,以能够及时回收该缓冲文件。

如图4所示,为本实施例的响应消息的缓冲方法的流程图,本实施例中的图3是在图2的基础上做出的调整。其中,步骤301~307分别与第二实施例中的步骤201~207大致相同,此处不再赘述;不同之处在于,本实施例还包括步骤308~309:

步骤308,识别响应消息是否从磁盘缓冲区获取的;若是,则进入步骤309,若否,则进入步骤311。

具体而言,消息处理线程可以根据响应消息的指针识别该响应消息是否为从磁盘缓冲区获取的。如果不是从磁盘缓冲区获取,那么表示响应消息是从内存缓冲区获取的,则进入步骤311,然后再进入步骤312。

步骤309,判断响应消息所在的缓冲文件中的所有响应消息是否均已发送完毕。若是,则进入步骤310;若否,则进入步骤311。

如果响应消息是从磁盘缓冲区获取的,那么响应消息所在的缓冲文件的所有响应消息是否均已发送完毕。其中,响应消息被发送完毕后,消息处理线程会将其标志为已发送状态;因此,消息处理线程可以查询该响应消息所在的缓冲文件中的所有响应消息是否均已被标注为已发送状态,若是,则表示该响应消息所在的缓冲文件中的所有响应消息均已发送完毕。

步骤310,回收响应消息所在的缓冲文件。

本实施例中,步骤310包括以下子步骤:

子步骤3101:将响应消息所在的缓冲文件标记为待回收状态。

具体而言,由于本实施例中预先创建了磁盘缓冲区目录消息(请参考第一实施例中的相关描述),消息处理线程可以在磁盘缓冲区目录中,将该响应消息所在的缓冲文件对应的文件名称标注为待回收状态。

子步骤3102:定时回收被标记为待回收状态的缓冲文件。

具体而言,服务器内部还创建了磁盘回收定时器和磁盘回收模块,该磁盘回收定时器会定时扫描磁盘缓冲区目录中是否有待回收的磁盘缓冲文件;若有的话,则通知通知磁盘回收模块回收该缓冲文件。

本实施例对于回收响应消息所在的缓冲文件的具体方式不作任何限制,上述的子步骤3101和子步骤3102只是一个较佳的例子。在其他例子中,当消息处理线程检测到某一缓冲文件中的所有响应消息均已发送完毕时,也可以直接通知磁盘回收模块回收该缓冲文件。

步骤311,判断响应消息所在的缓冲块中的所有响应消息是否均已发送完毕。

步骤312,回收响应消息所在的缓冲块。

其中,响应消息所在的缓冲块的回收方式与现有技术中类似,此处不再赘述。

相对于第二实施例而言,本实施例中,当磁盘缓冲区中某个缓冲文件中的所有响应消息都发送完毕后,服务器可以及时回收该缓冲文件,以便于磁盘空间的循环利用。需要说明的是,本实施方式也可以是在第一实施例基础上的改进,且起到的技术效果相同。

上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。

本发明的第四实施方式涉及一种服务器,如图5所示,包括:至少一个处理器11;以及,与至少一个处理器11通信连接的存储器12;其中,存储器12存储有可被至少一个处理器11执行的指令,指令被所述至少一个处理器11执行,以使至少一个处理器11能够执行上述第一至第三实施例中任一实施例所述的响应消息的缓冲方法。

其中,存储器12和处理器11采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器11和存储器12的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器11处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器11。

处理器11负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器12可以被用于存储处理器11在执行操作时所使用的数据。

本发明第五实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。

即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。

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