CN101247319B - 处理异步消息队列的方法、系统和异步socket - Google Patents
处理异步消息队列的方法、系统和异步socket Download PDFInfo
- Publication number
- CN101247319B CN101247319B CN2007100793963A CN200710079396A CN101247319B CN 101247319 B CN101247319 B CN 101247319B CN 2007100793963 A CN2007100793963 A CN 2007100793963A CN 200710079396 A CN200710079396 A CN 200710079396A CN 101247319 B CN101247319 B CN 101247319B
- Authority
- CN
- China
- Prior art keywords
- asynchronous
- reading
- module
- read
- message
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种处理异步消息队列的方法,包括步骤:A、异步SOCKET将接收到的底层数据放入接收缓存,判断异步消息队列中是否有未读取的异步读消息,如果异步消息队列中没有未读取的异步读消息则向所述异步消息队列中写入一异步读消息,执行步骤B,如果异步消息队列中有未读取的异步读消息,则执行步骤B;B、上层协议读取所述异步读消息后,从异步SOCKET接收缓存中读取底层数据。本发明还公开了一种处理异步消息队列的系统和一种异步SOCKET。应用本发明减少了异步读消息对异步消息队列空间的占用,提高了上层协议处理相应报文数据的速度,避免了初始导入大量路由或者路由振荡时,因异步消息队列满载而丢失数据的情况发生。
Description
技术领域
本发明涉及通信技术领域,具体的特别涉及一种处理异步消息队列的方法、系统和异步SOCKET。
背景技术
SOCKET(套接字)是一个通信链的句柄,用于描述IP地址和端口,应用程序通常通过SOCKET向网络发出请求或者应答网络请求。SOCKET在网络通信中的重要性越来越大,现有的BGP(边缘网关协议)、LDP(标签分发协议)、OSPF(内部网关协议)、ISIS(链路状态协议)等路由协议,以及TELNET(TCP/IP终端仿真协议)、FTP(文件传输协议)、HTTP(超文本传输协议)等网络传输协议都依托于SOCKET提供的接口完成与底层之间的数据交互。
现有路由协议通常采用异步SOCKET实现上层协议和底层之间的数据承载。异步SOCKET采用消息机制,这种消息机制在时间上将数据与事件分离。现有异步消息队列的处理流程如图1所示:
步骤101:异步SOCKET接收底层传输的数据。
底层传送到异步SOCKET的数据在被上层协议读取之前,存放于该异步SOCKET的接收缓存中。
步骤102:异步SOCKET向异步消息队列中写入异步读消息。
异步SOCKET将接收到的底层数据存放于接收缓存中,同时以写读事件位的方式告知上层协议“有数据到达”,同时将异步读消息写入异步消息队列中。在异步SOCKET的实现中,SOCKET使用的异步消息队列由路由管理器创建并维护,该异步消息队列的入口为SOCKET的异步消息,出口为上层协议的读取。
步骤103:上层协议从异步SOCKET接收缓存中读取数据。
上层协议接收并读取异步读消息后,可以根据该消息内的字段,识别相应的异步SOCKET和与该异步SOCKET挂接的上层协议,若 该异步SOCKET与当前上层协议匹配,则该上层协议调用异步SOCKET的读取接口读取该异步SOCKET接收缓存中的数据。
现有异步读消息上报示意图如图2所示:其中,异步SOCKET在接收到底层数据后,在异步SOCKET内部以异步读事件加异步读消息的方式通知上层协议,上层协议确认异步读事件后,再读取异步读消息,然后根据该消息的类型对读取的底层数据做相应的处理。图2中异步SOCKET的异步消息队列操作与异步SOCKET接收到的数据一一对应,即每接收到一次底层数据就相应的向异步消息队列中写入一次异步读消息。
现有的异步消息队列处理方法,以及异步事件消息的上报机制虽然清晰地表达了“接收数据-通知协议”的过程,但在实际应用中,这种机制会引发大量的空闲异步读消息占用异步消息的队列资源,特别当异步SOCKET接收数据频繁时尤其突出。
首先,由于异步SOCKET频繁接收来自底层的报文数据,同时向异步消息队列中写入大量的异步读消息,当网络中路由协议在初始导入大量路由,或者当网络中产生路由振荡时,若上层协议处理相应报文数据的速度稍微减慢,则极有可能造成异步消息队列中的资源爆满,从而导致异步SOCKET丢失报文数据。
其次,上层路由协议在接收到异步SOCKET写入的一个异步读消息时,一次读完异步SOCKET接收缓存。当异步SOCKET连续接收完几个底层报文数据,并写入相应多的异步读消息,而上层路由协议在得到第一个异步读消息时,就一次性读完了异步SOCKET接收缓存中的所有报文数据,则剩下的异步读消息就会触发大量的上层路由协议空读。
再次,当多个上层路由协议与异步SOCKET建立连接时,每个路由协议都会产生大量的异步读消息。在一个时间范围内,异步消息队列被其中一部分路由协议的消息占据,剩余的路由协议由于异步消息队列已满而无法成功写消息。在这种情况下若丢弃报文就会造成路由数据丢失;若尽最大可能保留报文数据,则由于长时间无法写异步读 消息,当异步SOCKET接收缓存满后,就再也不会通知异步读消息,从而造成异步SOCKET中的缓存堆积。
发明内容
本发明的实施例提供一种处理异步消息队列的方法,以解决现有技术中由于重复向异步消息队列中写入异步读消息,容易造成异步消息队列中资源爆满,异步读消息触发大量的上层路由协议空读,SOCKET丢失报文数据,从而导致网络中路由信息丢失的问题。
本发明的另一实施例提供一种处理异步消息队列的系统,以解决现有技术中重复向异步消息队列中写入异步读消息,容易造成队列中资源爆满,报文丢失的问题。
本发明的又一实施例提供一种异步SOCKET模块,以解决现有技术中异步SOCKET重复向异步消息队列中写入异步读消息的问题。
为解决上述问题,本发明的实施例提供如下技术方案:
一种处理异步消息队列的方法,包括步骤:
A、异步SOCKET模块将接收到的底层数据放入接收缓存,判断异步消息队列中是否有未读取的异步读消息,如果异步消息队列中没有未读取的异步读消息,则向所述异步消息队列中写入一异步读消息,执行步骤B,如果异步消息队列中有未读取的异步读消息,则执行步骤B;
B、上层协议读取异步消息队列中的异步读消息后,从异步SOCKET模块接收缓存中读取底层数据。
一种处理异步消息队列的系统,所述系统包括:底层数据模块、上层协议模块以及连接底层数据模块和上层协议模块的异步SOCKET模块,
所述异步SOCKET模块包括:
接收缓存模块,接收并存放所述底层数据模块发送的数据;
判断异步读消息模块,用于判断异步消息队列中是否有未读取的异步读消息;
写异步读消息模块,用于当异步消息队列中没有未读取的异步读 消息时,向所述异步消息队列中写入一异步读消息;
所述上层协议模块包括:
读异步读消息模块,用于读取所述异步消息队列中写入的异步读消息;
读取数据模块,用于从所述接收缓存模块中读取底层数据。
一种异步SOCKET模块,包括:
接收缓存模块,用于存放接收到的底层数据;
判断异步读消息模块,用于判断异步消息队列中是否有未读取的异步读消息;
写异步读消息模块,用于当异步消息队列中没有未读取的异步读消息时,向所述异步消息队列中写入一异步读消息。
由以上本发明提供的实施例可见,本发明异步SOCKET在一段时间内连续接收到底层数据后,只向异步消息队列中写入一个异步读消息,当多个上层路由协议与异步SOCKET建立连接时,由于每个上层路由协议只对应各自写入的一个异步读消息,因此极大减少了异步读消息对异步消息队列空间的占用,提高了上层协议处理相应报文数据的速度,不会造成异步消息队列中资源的浪费,避免了初始导入大量路由或者路由振荡时,因异步消息队列满载而丢失数据的情况发生,提高了网络中路由器的处理效率,增强了网络的健壮性。
附图说明
图1为现有技术中处理异步消息队列的流程图;
图2为现有技术中异步读消息上报示意图;
图3为本发明处理异步消息队列的方法流程图;
图4为本发明第一实施例流程图;
图5为本发明异步读消息上报示意图;
图6本发明第二实施例流程图;
图7本发明第三实施例流程图;
图8本发明第四实施例流程图;
图9为本发明处理异步消息队列系统的框图;
图10为本发明异步SOCKET一个实施例的框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和实施方式对本发明作进一步的详细说明。
在异步SOCKET的实现过程中,异步SOCKET使用的异步消息队列由路由管理器创建和维护,该异步消息队列的入口为异步SOCKET的异步读消息,出口为上层协议的读取。当异步SOCKET从底层接收到数据后,将数据挂载在接收缓存中,在该异步SOCKET调用异步消息队列的过程中要分别进行异步读事件和异步读消息的处理。其中,异步读事件是在调用异步消息队列写操作中,对相应任务的读事件位置位;异步读消息是一个结构体,记录了相应的异步SOCKET和任务信息,当异步SOCKET接收到底层数据后,在异步读事件位置位后,将该异步读消息写入异步消息队列中,供上层协议获取该异步读消息并执行相应的任务。
本发明处理异步消息队列的方法流程如图3所示:
步骤301:异步SOCKET将接收到的底层数据放入接收缓存,判断异步消息队列中是否有未读取的异步读消息,如果异步消息队列中没有未读取的异步读消息则向该异步消息队列中写入一异步读消息,执行步骤302,如果异步消息队列中有未读取的异步读消息则执行步骤302;
具体的,在判断异步消息队列中是否有未读取的异步读消息时,异步SOCKET设置一个合并标志计数器,初始设置该合并标志计数器时,将所述计数器设为预设值,该预设值一般设置为零,也可设置为其他值,后面的实施例中均以零为例进行描述。当该异步SOCKET接收到一次数据后,判断该合并标志计数器的计数是否为预设值,若为预设值则表示异步消息队列中没有未读取的异步读消息,否则,表示异步消息队列中有未读取的异步读消息;判断结束后将该计数器的预设值加一,或者将该计数器的预设值减一。
步骤302:上层协议读取异步消息队列中的异步读消息后,从异 步SOCKET接收缓存中读取底层数据。
当初始设置的上层协议数据缓存与异步SOCKET接收缓存长度一致时,上层协议读取该一个异步读消息后,从异步SOCKET接收缓存中一次读尽底层数据;当初始设置的上层协议数据缓存小于异步SOCKET接收缓存长度时,上层协议设置一个内存空间申请缓存,当上层协议从异步SOCKET接收缓存中读取一次底层数据后,根据接收缓存中剩余底层数据的长度,向内存空间申请缓存申请一段与该剩余底层数据长度相等的扩展数据缓存用于读取异步SOCKET接收缓存中的剩余底层数据。
当上层协议未能读尽异步SOCKET接收缓存中的底层数据时,通过向异步消息队列中自激性写入一异步读消息,以使上层协议将接收缓存中的底层数据读尽,这里自激性写入表示接收缓存中有未读取尽的底层数据时,上层协议自发地向异步消息队列中写入异步读消息以使上层协议进一步读尽底层数据。具体的,当上层协议为数据流协议时,该上层协议读取底层数据后,异步SOCKET判断接收缓存中的底层数据是否被读尽;若是,则该异步SOCKET向异步消息队列中写入一异步读消息促使上层协议继续读取底层数据,否则,结束异步读消息的上报流程;当上层协议为数据报协议时,该上层协议读取底层数据后,异步SOCKET记录准备向异步消息队列中写入的异步读消息,当该异步SOCKET在预制时间内没有接收到新的底层数据时,该异步SOCKET向异步消息队列中写入前述记录的异步读消息,以促使上层协议继续读取底层数据,通常该预制时间一般不超过500毫秒。
本发明第一实施例的流程图如图4所示,该实施例示出了上层协议将异步SOCKET接收缓存中的底层数据一次读尽的处理流程:
步骤401:异步SOCKET设置合并标志计数器。
异步SOCKET初始设置合并标志计数器的计数为零,设置的合并标志计数器主要用于判断异步消息队列中是否有未读取的异步读消息。
步骤402:异步SOCKET将在一段时间(优选一个报文时间)内 接收到的底层数据放入接收缓存。
步骤403:判断合并标志计数器的计数是否为零,若是,则执行步骤404;否则,转到步骤405。
步骤404:异步SOCKET向异步消息队列中写入一个异步读消息。
步骤405:异步SOCKET将合并标志计数器的计数加一。
步骤406:上层协议读取异步消息队列中的异步读消息后从接收缓存中读尽底层数据。
若初始设置的上层协议数据缓存与异步SOCKET接收缓存长度一致,当上层协议读取异步SOCKET接收缓存中的底层数据时,无论该接收缓存中的数据满或不满,上层协议的数据缓存都可以容纳所读取的底层数据。
步骤407:将合并标志计数器清零,结束流程。
本发明中异步读消息上报的示意图如图5所示,图中异步SOCKET在一段时间内(优选一个报文时间)连续接收到底层数据后,将接收底层数据相应的异步读消息合并为一个异步读消息后,写入异步消息队列中供上层协议读取。异步SOCKET在一个报文时间内接收到五个底层数据,这五个底层数据分别触发相应的写读消息事件后,在向异步消息队列中写入异步读消息请求上层协议读取底层数据时,将原本需要分别写入的五个异步读消息进行合并,即在一个报文时间内无论接收到多少个底层数据,都只向异步消息队列中写入一个异步读消息。上层协议可以为异步SOCKET设置接口和函数完成本发明实施例的异步读消息合并上报。
当上层协议为异步SOCKET设置完该接口函数后,该异步SOCKET内部就会实施合并异步读消息的操作,而上层协议无需进行相应读取流程上的修改。
本发明第二实施例的流程如图6所示,该实施例示出了上层协议将异步SOCKET接收缓存中的底层数据一次读尽的另一种处理流程:
步骤601:异步SOCKET设置合并标志计数器。
异步SOCKET初始设置合并标志计数器时,将该计数器置零,这 里设置的合并标志计数器主要用于判断异步消息队列中是否有未读取的异步读消息。
步骤602:异步SOCKET将在一段时间(优选一个报文时间)内接收到的底层数据放入接收缓存。
步骤603:判断合并标志计数器的计数是否为零,若是,则执行步骤604;否则,转到步骤605。
步骤604:异步SOCKET向异步消息队列中写入一个异步读消息。
步骤605:异步SOCKET将合并标志计数器的计数加一。
步骤606:设置上层协议的内存空间申请缓存。
若初始设置的上层协议数据缓存小于异步SOCKET接收缓存长度,则在上层协议中设置一个内存空间申请缓存,当上层协议读取一次异步SOCKET接收缓存中的底层数据后,可以根据接收缓存中剩余底层数据的长度灵活地申请上层协议中的扩展数据缓存,使扩展数据缓存正好可以将异步SOCKET接收缓存中的底层数据读尽,这样不仅保证了底层数据可以被读尽,而且不会浪费上层协议中的数据缓存空间。
步骤607:上层协议读取异步消息队列中的异步读消息后从异步SOCKET接收缓存中读取底层数据。
步骤608:上层协议通过内存空间申请缓存申请与接收缓存中剩余数据长度相等的扩展数据缓存。
步骤609:上层协议应用扩展数据缓存读取接收缓存中的剩余底层数据。
步骤610:将合并标志计数器清零,结束流程。
由于某些上层协议无法在一个报文处理时间内读完异步SOCKET接收缓存中的底层数据,因此需要SOCKET自激性的向异步消息队列中写入异步读消息,触发上层协议继续读取接收缓存中的底层数据,直至接收缓存中的底层数据全部被上层协议读尽。
针对不同的上层协议采用不同的运输层协议而造成的读取异步SOCKET接收缓存中底层数据的流程差异,为了保证异步SOCKET在 得知上层协议没有读取完接收缓存中的底层数据时,能在最短时间内自激性的向异步消息队列中写入用于通知上层协议的异步读消息,则要针对不同的上层协议进行相应的自激流程处理。
本发明第三实施例的流程如图7所示,该实施例示出了当上层协议为数据流协议,且该上层协议没有将异步SOCKET接收缓存中的底层数据一次读尽时的处理流程,其中,数据流协议主要包括TCP(传输控制协议):
步骤701:异步SOCKET设置合并标志计数器。
异步SOCKET初始设置合并标志计数器时,将该计数器置零,这里设置的合并标志计数器主要用于判断异步消息队列中是否有未读取的异步读消息。
步骤702:异步SOCKET将在一段时间(优选一个报文时间)内接收到的底层数据放入接收缓存中。
步骤703:判断合并标志计数器的计数是否为零,若是,则执行步骤704;否则,转到步骤705。
步骤704:异步SOCKET向异步消息队列中写入一个异步读消息。
步骤705:异步SOCKET将合并标志计数器的计数加一。
步骤706:上层协议读取异步消息队列中的异步读消息后从异步SOCKET的接收缓存中读取底层数据。
步骤707:判断异步SOCKET接收缓存中的底层数据是否被读尽,若是,则执行步骤709;否则,执行步骤708。
步骤708:异步SOCKET向异步消息队列中自激写入一个异步读消息,然后返回步骤706。
步骤709:将合并标志计数器的计数清零,结束流程。
本发明第四实施例的流程如图8所示,该实施例示出了当上层协议为数据报协议,且该上层协议没有将异步SOCKET接收缓存中的底层数据一次读尽的处理流程,其中,数据报协议主要包括UDP(用户数据报协议),RAWIP(原IP协议),RAWLINK(原链路协议):
步骤801:异步SOCKET设置合并标志计数器。
异步SOCKET初始设置合并标志计数器时,将该计数器置零,这里设置的合并标志计数器主要用于判断异步消息队列中是否有未读取的异步读消息。
步骤802:异步SOCKET将在一段时间(优选一个报文时间)内接收到的底层数据放入接收缓存中。
步骤803:判断合并标志计数器的计数是否为零,若是,则执行步骤804;否则,转到步骤805。
步骤804:异步SOCKET向异步消息队列中写入一个异步读消息。
步骤805:异步SOCKET将合并标志计数器的计数加一。
步骤806:上层协议读取异步消息队列中的异步读消息后从异步SOCKET的接收缓存中读取底层数据。
步骤807:异步SOCKET记录准备向异步消息队列写入的异步读消息。
当上层协议为数据报协议时,异步SOCKET不实时自激写入异步读消息,而是先记录准备向异步消息队列中写入的异步读消息,但该过程中允许新的报文数据相应执行向异步消息队列中写异步读消息的操作。
步骤808:判断异步SOCKET在预制时间(例如500毫秒)内是否接收到新的底层数据,若是,则执行步骤810;否则,执行步骤809。
步骤809:异步SOCKET向异步消息队列中自激写入一个异步读消息,然后返回步骤806。
步骤810:将合并标志计数器的计数清零,结束流程。
本发明处理异步消息队列系统的框图如图9所示:
该系统包括:底层数据模块S1,用于向异步SOCKET模块发送底层数据;异步SOCKET模块S2,用于接收底层数据后向异步消息队列中写入异步读消息;上层协议模块S3,用于读取异步读消息后从异步SOCKET模块中读取底层数据。
异步SOCKET模块S2包括接收缓存模块S21,用于接收并存放一段时间(优选一个报文时间)内底层数据模块发送的数据;判断异 步读消息模块S22,用于判断异步消息队列中是否有未读取的异步读消息;写异步读消息模块S23,用于当异步消息队列中没有未读取的异步读消息时,向异步消息队列中写入一异步读消息,还可以用于当异步SOCKET接收缓存中的底层数据未被上层协议读尽时,向异步消息队列中自激写入一异步读消息;自激异步读消息模块S24,用于当异步SOCKET接收缓存中的底层数据未被上层协议读尽时,向异步消息队列中写入一异步读消息。
其中,判断异步读消息模块S22包括设置计数器模块S221,用于在异步SOCKET中设置合并标志计数器;判断计数器模块S222,通过合并标志计数器的计数判断异步消息队列中是否有未读取的异步读消息;操作计数器模块S223,用于将合并标志计数器的计数值加一或减一;重置计数器模块S224,用于当读取数据模块从接收缓存中读取数据后,将合并标志计数器重置为预设值。
其中,自激异步读消息模块S24包括判断上层协议模块S241,用于判断上层协议为数据流协议,或为数据报协议;判断数据读取模块S242,用于当上层协议为数据流协议时,上层协议读取接收缓存模块中的底层数据后,判断接收缓存模块中的底层数据是否被读尽;重复写异步读消息模块S243,与判断数据读取模块相连,用于当接收缓存模块中的底层数据未被上层协议读尽时,向异步消息队列中写入一异步读消息;缓存异步读消息模块S244,用于当上层协议为数据报协议时,当数据读取模块读取接收缓存模块中的底层数据后,记录准备向异步消息队列中写入的异步读消息;判断接收数据模块S245,与缓存异步读消息模块相连,用于在预制时间内(一般为500毫秒)接收缓存模块没有接收到新的底层数据时,向异步消息队列中写入记录的异步读消息。
上层协议模块S3包括读取异步读消息模块S31,用于读取异步消息队列中写入的一个异步读消息,还可以用于读取自激写入的一异步读消息;读取数据模块S32,用于从接收缓存模块中读取底层数据,还可以用于从异步SOCKET接收缓存中读取剩余的底层数据;重复读 取异步读消息模块S33,用于读取自激异步读消息模块向异步消息队列中写入的一异步读消息;重复读取数据模块S34,用于从异步SOCKET接收缓存中读取剩余的底层数据。
其中,读取数据模块S32包括判断数据缓存模块S321,用于判断初始设置的上层协议数据缓存与异步SOCKET接收缓存长度是否一致;读尽数据模块S322,用于当判断数据缓存模块判断初始设置的上层协议数据缓存与异步SOCKET接收缓存长度一致时,从异步SOCKET接收缓存中一次读尽底层数据;设置申请缓存模块S323,用于当判断数据缓存模块判断初始设置的上层协议数据缓存小于异步SOCKET接收缓存长度时,在上层协议中设置一个内存空间申请缓存;一次读取数据模块S324,用于根据上层协议数据缓存的长度从异步SOCKET接收缓存中读取一次底层数据;申请扩展缓存空间模块S325,用于向设置申请缓存模块申请一段与异步SOCKET接收缓存中剩余数据长度相等的扩展数据缓存;二次读取数据模块S326,用于通过扩展数据缓存读尽异步SOCKET接收缓存中的剩余数据。
利用本发明系统处理异步消息队列的详细过程与前面对本发明方法的描述类似,在此不再赘述。
本发明异步SOCKET的一个实施例框图如图10所示:
该异步SOCKET包括:接收缓存模块S41,用于接收并存放一段时间(优选一个报文时间)底层数据模块发送的数据;判断异步读消息模块S42,用于判断异步消息队列中是否有未读取的异步读消息;写异步读消息模块S43,用于当异步消息队列中没有未读取的异步读消息时,向异步消息队列中写入一异步读消息,还可以用于当异步SOCKET接收缓存中的底层数据未被上层协议读尽时,向所述异步消息队列中自激写入一异步读消息;自激异步读消息模块S44,用于当异步SOCKET接收缓存中的底层数据未被上层协议读尽时,向异步消息队列中写入一异步读消息。
其中,判断异步读消息模块S42包括设置计数器模块421,用于在异步SOCKET中设置合并标志计数器;判断计数器模块S422,通 过合并标志计数器的计数判断异步消息队列中是否有未读取的异步读消息;操作计数器模块S423,用于将合并标志计数器的计数值加一或减一;重置计数器模块S424,用于当上层协议从接收缓存中读取数据后,将合并标志计数器重置为预设值。
其中,自激异步读消息模块S44包括判断上层协议模块S441,用于判断上层协议为数据流协议,或为数据报协议;判断数据读取模块S442,用于当上层协议为数据流协议时,上层协议读取接收缓存模块中的底层数据后,判断接收缓存模块中的底层数据是否被读尽;重复写异步读消息模块S443,与判断数据读取模块相连,用于当接收缓存模块中的底层数据未被上层协议读尽时,向异步消息队列中写入一异步读消息;缓存异步读消息模块S444,用于当上层协议为数据报协议时,当数据读取模块读取接收缓存模块中的底层数据后,记录准备向异步消息队列中写入的异步读消息;判断接收数据模块S445,与缓存异步读消息模块相连,用于在预制时间内接收缓存模块没有接收到新的底层数据时,向异步消息队列中写入记录的异步读消息。
利用本发明异步SOCKET对异步消息队列进行处理,其详细过程与前面对本发明方法的描述类似,在此不再赘述。
由以上对本发明实施例的描述可知,由于在一段时间内异步SOCKET仅向异步消息队列中写入一异步读消息,上层协议只会到接收缓存中读取一次底层数据,因此网络中不会出现上层路由协议空读异步SOCKET接收缓存的情况,极大提高了上层协议读取底层数据的性能。
当异步SOCKET接收缓存中的底层数据没有一次被读尽时,通过自激方式向异步消息队列中写入一异步读消息,触发上层协议将剩余的底层数据读尽,因此不会造成异步SOCKET中的接收缓存堆积。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
Claims (13)
1.一种处理异步消息队列的方法,其特征在于,包括步骤:
A、异步SOCKET模块将接收到的底层数据放入接收缓存,判断异步消息队列中是否有未读取的异步读消息,如果异步消息队列中没有未读取的异步读消息,则向所述异步消息队列中写入一异步读消息,执行步骤B,如果异步消息队列中有未读取的异步读消息,则执行步骤B;
B、上层协议读取异步消息队列中的异步读消息后,从异步SOCKET模块接收缓存中读取底层数据。
2.根据权利要求1所述的方法,其特征在于,所述判断异步消息队列中是否有未读取的异步读消息的方法为:判断一合并标志计数器的计数是否为一预设值,若为所述预设值则异步消息队列中没有未读取的异步读消息;否则,异步消息队列中有未读取的异步读消息;
判断异步消息队列中是否有未读取的异步读消息之后将所述合并标志计数器的计数值加一或减一。
3.根据权利要求2所述的方法,其特征在于,所述步骤B中上层协议读取异步SOCKET模块接收缓存中的底层数据后所述合并标志计数器将其计数重置为所述预设值。
4.根据权利要求1所述的方法,其特征在于,所述步骤B包括:
上层协议设置一个内存空间申请缓存;
上层协议读取所述异步读消息后,根据上层协议数据缓存的长度从异步SOCKET模块接收缓存中读取一次底层数据;
上层协议根据所述异步SOCKET模块接收缓存中剩余数据长度,向所述内存空间申请缓存申请一段与所述剩余数据长度相等的扩展数据缓存;
上层协议应用所述扩展数据缓存读尽所述异步SOCKET模块接收缓存中的剩余底层数据。
5.根据权利要求1所述的方法,其特征在于,若所述步骤B中上层协议不能一次读尽异步SOCKET模块接收缓存中的底层数据,所述方法还包括:
C、异步SOCKET模块向所述异步消息队列中自激性写入一异步读消息;
D、返回步骤B,直至上层协议将所述异步SOCKET模块接收缓存中的底层数据读尽。
6.根据权利要求5所述的方法,其特征在于,所述上层协议为数据流协议,所述步骤C包括:
上层协议读取异步SOCKET模块接收缓存中的底层数据后,该异步SOCKET模块判断接收缓存中的底层数据是否被读尽;若否,
则所述异步SOCKET模块向异步消息队列中写入一异步读消息;否则,结束异步读消息的上报。
7.一种处理异步消息队列的系统,所述系统包括:底层数据模块、上层协议模块以及连接底层数据模块和上层协议模块的异步SOCKET模块,其特征在于,
所述异步SOCKET模块包括:
接收缓存模块,接收并存放所述底层数据模块发送的数据;
判断异步读消息模块,用于判断异步消息队列中是否有未读取的异步读消息;
写异步读消息模块,用于当异步消息队列中没有未读取的异步读消息时,向所述异步消息队列中写入一异步读消息;
所述上层协议模块包括:
读异步读消息模块,用于读取所述异步消息队列中写入的异步读消息;
读取数据模块,用于从所述接收缓存模块中读取底层数据。
8.根据权利要求7所述的系统,其特征在于,所述判断异步读消息模块包括:
设置计数器模块,用于在异步SOCKET模块中设置合并标志计数器;
判断计数器模块,通过所述合并标志计数器的计数判断异步消息队列中是否有未读取的异步读消息;
操作计数器模块,用于将所述合并标志计数器的计数值加一或减一;
重置计数器模块,用于当读取数据模块从接收缓存中读取数据后,将所述合并标志计数器重置为预设值。
9.根据权利要求7所述的系统,其特征在于,所述读取数据模块包括:
判断数据缓存模块,用于判断初始设置的上层协议数据缓存与异步SOCKET模块接收缓存长度是否一致;
读尽数据模块,用于当判断数据缓存模块判断初始设置的上层协议数据缓存与异步SOCKET模块接收缓存长度一致时,从异步SOCKET模块接收缓存中一次读尽底层数据;
设置申请缓存模块,用于当判断数据缓存模块判断初始设置的上层协议数据缓存小于异步SOCKET模块接收缓存长度时,在上层协议中设置一个内存空间申请缓存;
一次读取数据模块,用于根据上层协议数据缓存的长度从异步SOCKET模块接收缓存中读取一次底层数据;
申请扩展缓存空间模块,用于向所述设置申请缓存模块申请一段与异步SOCKET模块接收缓存中剩余数据长度相等的扩展数据缓存;
二次读取数据模块,用于通过所述扩展数据缓存读尽所述异步SOCKET模块接收缓存中的剩余数据。
10.根据权利要求7所述的系统,其特征在于,
所述写异步读消息模块进一步用于当异步SOCKET模块接收缓存中的底层数据未被上层协议读尽时,向所述异步消息队列中自激写入一异步读消息;
所述读异步读消息模块进一步用于读取所述自激写入的异步读消息;
所述读取数据模块进一步用于从异步SOCKET模块接收缓存中读取剩余的底层数据。
11.一种异步SOCKET模块,其特征在于,包括:
接收缓存模块,用于存放接收到的底层数据;
判断异步读消息模块,用于判断异步消息队列中是否有未读取的异步读消息;
写异步读消息模块,用于当异步消息队列中没有未读取的异步读消息时,向所述异步消息队列中写入一异步读消息。
12.根据权利要求11所述的异步SOCKET模块,其特征在于,所述判断异步读消息模块包括:
设置计数器模块,用于在异步SOCKET模块中设置合并标志计数器;
判断计数器模块,通过所述合并标志计数器的计数判断异步消息队列中是否有未读取的异步读消息;
操作计数器模块,用于将所述合并标志计数器的计数值加一或减一;
重置计数器模块,用于当上层协议从接收缓存中读取数据后,将所述合并标志计数器重置为预设值。
13.根据权利要求11所述的异步SOCKET模块,其特征在于,
所述写异步读消息模块进一步用于当异步SOCKET模块接收缓存中的底层数据未被上层协议读尽时,向所述异步消息队列中自激写入一异步读消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100793963A CN101247319B (zh) | 2007-02-16 | 2007-02-16 | 处理异步消息队列的方法、系统和异步socket |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100793963A CN101247319B (zh) | 2007-02-16 | 2007-02-16 | 处理异步消息队列的方法、系统和异步socket |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101247319A CN101247319A (zh) | 2008-08-20 |
CN101247319B true CN101247319B (zh) | 2011-06-08 |
Family
ID=39947539
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007100793963A Expired - Fee Related CN101247319B (zh) | 2007-02-16 | 2007-02-16 | 处理异步消息队列的方法、系统和异步socket |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101247319B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103179087B (zh) * | 2011-12-21 | 2016-07-06 | 上海飞田通信技术有限公司 | 应用层到TCP层异步Socket数据传输方法及系统 |
CN104699512A (zh) * | 2015-03-31 | 2015-06-10 | 四川秘无痕信息安全技术有限责任公司 | 一种用于在线读写安卓设备底层数据的程序及方法 |
CN111859877A (zh) * | 2020-07-17 | 2020-10-30 | 浪潮云信息技术股份公司 | 一种excel导入导出的实现方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1477835A (zh) * | 2002-08-19 | 2004-02-25 | 万达信息股份有限公司 | 一种网络数据交换中同步与异步间的转换方法 |
-
2007
- 2007-02-16 CN CN2007100793963A patent/CN101247319B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1477835A (zh) * | 2002-08-19 | 2004-02-25 | 万达信息股份有限公司 | 一种网络数据交换中同步与异步间的转换方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101247319A (zh) | 2008-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Welzl | Network congestion control: managing internet traffic | |
CN102106125B (zh) | 一种多路径网络 | |
CN1649341B (zh) | 应用路由选择协议的堆叠式路由器 | |
CN101345705B (zh) | 分组转发装置及分组转发方法 | |
CN101448006B (zh) | 一种实现流媒体服务器大量终端接入的方法及系统 | |
Joo et al. | TCP/IP traffic dynamics and network performance: A lesson in workload modeling, flow control, and trace-driven simulations | |
US6970450B1 (en) | System, method and computer program product for point-to-point bandwidth conservation in an IP network | |
US8467390B2 (en) | Method and system for network stack tuning | |
CN103841018A (zh) | 一种基于内容网多端口的转发方法及路由器 | |
CN101534204A (zh) | 流媒体信息分发系统和方法及客户端 | |
US7269752B2 (en) | Dynamically controlling power consumption within a network node | |
De Leenheer et al. | A view on enabling-consumer oriented grids through optical burst switching | |
CN101127702A (zh) | 用于平面结构网络的多对多可靠组播错误恢复方法 | |
US7396993B2 (en) | Transmission of MIDI using TCP and UDP | |
CN101247319B (zh) | 处理异步消息队列的方法、系统和异步socket | |
CN103201987A (zh) | 区分路由信息更新的优先级 | |
CN101815034B (zh) | 任务间消息发送方法及通信设备 | |
CN101193041A (zh) | 网络数据传输的方法、装置及系统 | |
CN115834556B (zh) | 数据传输方法、系统、设备、存储介质及程序产品 | |
CN100561978C (zh) | 一种策略路由装置和方法 | |
Ott et al. | Coordinated Multi-streaming for 3D Tele-immersion | |
CN102387062B (zh) | 动态桥接点改善p2p节点在跨网络时的传输速度的方法 | |
CN100407696C (zh) | Ip传真网关传输报文数据的方法 | |
CN113992609B (zh) | 一种处理多链路业务数据乱序的方法及系统 | |
Houmkozlis et al. | End-to-end Adaptive Congestion Control in TCP/IP Networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110608 Termination date: 20160216 |