CN102984086A - 数据通信中的数据发送方法和装置 - Google Patents
数据通信中的数据发送方法和装置 Download PDFInfo
- Publication number
- CN102984086A CN102984086A CN201210497455XA CN201210497455A CN102984086A CN 102984086 A CN102984086 A CN 102984086A CN 201210497455X A CN201210497455X A CN 201210497455XA CN 201210497455 A CN201210497455 A CN 201210497455A CN 102984086 A CN102984086 A CN 102984086A
- Authority
- CN
- China
- Prior art keywords
- data
- state
- sent
- team
- interactive instruction
- 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.)
- Granted
Links
Images
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本申请公开了一种数据通信中的数据发送方法和装置,应用于分布式的网络通信设备中,其中数据发送部件和数据接收部件间的数据发送交互流程的状态机包括n个状态;包括:创建发送队列,设置各状态分别对应的n个状态指针和当前新数据入队指针,将待发送的数据发入到发送队列中,第一个状态对应的发送任务依次发送数据,并根据数据接收部件返回的交互指令数据确定所需唤醒的下一状态对应的发送任务,将数据状态更新为下一状态,再唤醒该下一状态对应的发送任务。利用本发明,既可以发送具有状态机、并需要顺序处理的数据,同时减小发送设备的复杂度和成本,提高设备的工作效率和可维护性。
Description
技术领域
本申请涉及数据通信技术领域,尤其涉及一种数据通信中的数据发送方法和装置。
背景技术
当前的数据通信设备中,在事务处理和通信流程之间经常会出现矛盾,这种矛盾主要是由于两者之间的不同步造成的,比如处理完某一事务然后等待发送成功再处理下一个事务则会大大降低效率,当然,如果必须等待则另当别论。但是,如果处理不需要依赖发送的成功,比如流媒体或者某些网络游戏等等,则要考虑一种更好的方法来解决这个问题了。
解决方法之一是建立一个发送数据的发送队列,然后处理程序将要发送的数据放入队列,然后通信程序从发送队列的另一端取出数据发送。这个也是一个标准的生产者消费者模型:业务处理程序是生产者,通信程序是消费者,两者在不同的任务中运行,而产品则是待发送的数据。这样业务处理程序可以不间断地处理自己的逻辑,只需要把每次处理的结果数据放入这个发送队列即可。在该采用发送队列的数据发送技术中,都是将数据直接放入到发送队列中,由一个专门的发送任务取其中的数据进行发送,发送完成后即出队。
现有的上述数据发送技术,对于无状态机的数据是适用的。但是对于具有状态机、并需要顺序处理的数据,则并不适用。所述具有状态机并需要顺序处理的数据是指:待发送的数据有至少2个状态,后面的数据必须等待前面的数据状态变化到下一状态后,自身才能得到对应的处理。在这种情况下要保证待发送数据能被顺序处理和状态正常变化,如果还是采用现有的发送队列技术机制则行不通。现有技术中有采用增添新的非队列技术之外的新模块来保证这些需求,但是这种现有技术又会增加发送设备的复杂度和成本,降低了发送设备的工作效率和发送设备的可维护性。
发明内容
有鉴于此,本发明的主要目的在于提供一种数据通信中的数据发送方法和装置,既可以发送具有状态机、并需要顺序处理的数据,同时减小发送设备的复杂度和成本,提高设备的工作效率和可维护性。
本发明的技术方案是这样实现的:
一种数据通信中的数据发送方法,应用于分布式的网络通信设备中,该方法中数据发送部件和数据接收部件间的数据发送交互流程的状态机包括n个状态,n为大于等于2的正整数;该方法包括:
创建发送队列,设置和所述状态机的各状态分别对应的n个状态指针以及当前新数据入队指针,并将所述指针初始化为指向发送队列的第一个数据;
创建和所述状态机的各状态分别对应的n个状态发送任务;
创建用于接收来自数据接收部件的交互指令数据的接收任务;
数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列,并唤醒第一个状态发送任务;
第一个状态发送任务在被唤醒后,记录当前新数据入队指针,从第一个状态指针当前所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件;
接收任务接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的下一个状态即第m个状态后,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程;
其中,所述第m个状态发送任务对应的发送流程包括如下步骤,m为大于等于2、小于等于n的正整数:
A、将发送队列中的第m个状态指针指向的已发送数据作为当前数据;
B、判断当前数据的状态是否为第m个状态,如果是则执行下一步骤,否则结束本发送流程;
C、发送当前数据的第m个状态对应需发送的交互指令数据,将所述第m个状态的指针指向发送队列中存放数据的下一个位置;
D、判断该第m个状态是否为最后一个状态,如果是则进一步将当前数据移出所述队列,结束本流程;否则执行下一步骤;
E、判断第m个状态指针与第m-1个状态指针所指的位置是否相同,如果是则结束本发送流程,否则返回步骤A。
优选的,所述数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列的具体方法为:将数据发送部件的应用程序模块待发送数据的状态设置为第一个状态,并将待发送数据依次入队到发送队列,并在每入队一个数据后,移动当前新数据入队指针到发送队列中存放数据的下一个位置,直至将本次待发送数据入队完成。
优选的,所述第一个状态发送任务在被唤醒后,记录当前新数据入队指针,从第一个状态指当前针所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件,具体包括:第一个状态发送任务在被唤醒后,记录发送队列当前新数据入队指针的位置,从第一个状态指针当前所指向的数据开始发送,每发送一个数据,将所述第一个状态指针指向发送队列中存放数据的下一个位置,判断所述第一个状态指针与所述记录的当前新数据入队指针的位置是否相同,如果不相同,则继续发送当前第一个状态指针指向的数据,如果相同则完成本次发送任务。
优选的,接收任务接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的第m个状态的具体方法为:接收任务接收目的数据接收部件返回的交互指令数据,根据该交互指令数据中携带的数据编号确定该交互指令所对应的发送队列中的已发送数据,在所述发送数据中记录返回该交互指令数据的数据接收部件标记,并根据所述已发送数据中携带的目的数据接收部件信息,判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,如果是则根据所述已发送数据的当前状态即第m-1状态,判断需进入下一状态即第m个状态,执行后续的流程,否则继续接收该已发送数据对应的目的数据接收部件的交互指令数据。
优选的,所述记录返回该交互指令数据的数据接收部件标记,具体包括:用位图表征每个已发送数据对应的目的数据接收部件是否返回交互指令数据,在收到一个目的数据接收部件返回的交互指令数据后,在对应已发送数据中将返回交互指令数据的目的数据接收部件位图对应的比特位置1;
所述已发送数据中携带的目的数据接收部件信息,是指应用程序模块在将已发送数据入队到发送队列之前,在已发送数据中用位图表征该发送数据对应的目的数据接收部件,将需要接收该已发送数据的目的数据接收部件位图对应的比特位置1;
所述判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,具体包括:判断该已发送数据对应的目的数据接收部件位图是否和返回交互指令数据的目的数据接收部件位图相同,如果相同则判定收到该已发送数据对应的所有目的数据接收部件的交互指令数据,否则判定还没有收到该已发送数据对应的所有目的数据接收部件的交互指令数据。
优选的,所述的数据发送部件为所述分布式网络通信设备的主控卡,所述数据接收部件为所述分布式网络通信设备的线卡。
一种数据通信中的数据发送装置,应用于分布式的网络通信设备中的数据发送部件中,所述数据发送部件和对应的数据接收部件间的数据发送交互流程的状态机包括n个状态,n为大于等于2的正整数;该装置包括:
发送队列创建模块,用于设置和所述状态机的各状态分别对应的n个状态指针以及当前新数据入队指针,并将所述指针初始化为指向发送队列的第一个数据;
发送任务创建模块,用于创建和所述状态机的各状态分别对应的n个状态发送任务模块;
接收任务创建模块,用于创建用于接收来自数据接收部件的交互指令数据的接收任务模块;
入队模块,用于在数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列,并唤醒第一个状态发送任务模块;
第一个状态发送任务模块,用于在被唤醒后,记录当前新数据入队指针,从第一个状态指针当前所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件;
接收任务模块,用于接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的下一个状态即第m个状态后,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务模块,所述m为大于等于2、小于等于n的正整数;
m个状态发送任务模块,其中,第m个状态发送任务模块包括如下单元,:
第一单元,用于将发送队列中的第m个状态指针指向的已发送数据作为当前数据;
第二单元,用于判断当前数据的状态是否为第m个状态,如果是则执行下一单元,否则结束本发送任务;
第三单元,用于发送当前数据的第m个状态对应需发送的交互指令数据,将所述第m个状态的指针指向发送队列中存放数据的下一个位置;
第四单元,用于判断该第m个状态是否为最后一个状态,是则进一步将当前数据移出所述队列,结束本发送任务,否则执行下一单元;
第五单元,用于判断第m个状态指针与第m-1个状态指针所指的位置是否相同,如果是则结束本发送任务,否则返回第一单元。
优选的,所述入队模块具体用于:将数据发送部件的应用程序模块待发送数据的状态设置为第一个状态,并将待发送数据依次入队到发送队列,并在每入队一个数据后,移动当前新数据入队指针到发送队列中存放数据的下一个位置,直至将本次待发送数据入队完成,唤醒第一个状态发送任务。
优选的,所述第一个状态发送任务模块具体用于:在被唤醒后,记录发送队列当前新数据入队指针的位置,从第一个状态指针当前所指向的数据开始发送,每发送一个数据,将所述第一个状态指针指向发送队列中存放数据的下一个位置,判断所述第一个状态指针与所述记录的当前新数据入队指针的位置是否相同,如果不相同,则继续发送当前第一个状态指针指向的数据,如果相同则完成本次发送任务。
优选的,所述接收任务模块具体用于:接收目的数据接收部件返回的交互指令数据,根据该交互指令数据中携带的数据编号确定该交互指令所对应的发送队列中的已发送数据,在所述发送数据中记录返回该交互指令数据的数据接收部件标记,并根据所述已发送数据中携带的目的数据接收部件信息,判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,如果是则根据所述已发送数据的当前状态m-1,判断需进入第m个状态,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程,否则继续接收该已发送数据对应的目的数据接收部件的交互指令数据。
与现有技术相比,本发明实质上采用了一种新的发送队列技术机制,可以在已有的标准发送队列机制上应用巧妙的队列处理方式实现发送具有状态机、并需要顺序处理的数据,同时本发明又不需要增添新的非队列技术之外的新模块,从而减小增加新模块来发送具有状态机、并需要顺序处理的数据的开销,减小发送设备的复杂度和成本,提高设备的工作效率,提高设备的可维护性。
总之,本发明提高了发送带状态机数据的效率,实现方法简单,尤其符合嵌入式设备应用特点,适合嵌入式发送设备使用。
附图说明
图1为本发明所述数据通信中的数据发送方法的一种流程图;
图2所示为所述第m个状态发送任务对应的发送流程图;
图3为在本发明一种实施例中所假设的数据报文的状态机示意图;
图4为本发明所述实施例中SEND_NO_ACK状态对应的发送任务的发送流程图;
图5为本发明所述实施例中SEND_OK状态对应发送任务的发送流程图;
图6为本发明所述数据通信中的数据发送装置的一种组成示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明
图1为本发明所述数据通信中的数据发送方法的一种流程图。本发明的方法应用于分布式的网络通信设备中,该方法中数据发送部件和数据接收部件间的数据发送交互流程的状态机包括n个状态,n为大于等于2的正整数,即这种数据包括至少2个状态。
参见图1,该方法包括:
101、创建发送队列,设置和所述状态机的各状态分别对应的n个状态指针以及当前新数据入队指针,并将所述指针初始化为指向发送队列的第一个数据。
所述初始化,一般是指将所述各指针的初始值指向最初入队的数据位置。例如当队列以数组结构组织时,一般初始入队的数据的序号被标记为0,则所述指针也初始化为0。
102、创建和所述状态机的各状态分别对应的n个状态发送任务。
103、创建用于接收来自数据接收部件的交互指令数据的接收任务。
104、数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列,并唤醒第一个状态发送任务。
在一种实施例中,所述步骤104中,数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列的具体方法包括:将数据发送部件的应用程序模块待发送数据的状态设置为第一个状态,并将待发送数据依次入队到发送队列,并在每入队一个数据后,移动当前新数据入队指针到发送队列中存放数据的下一个位置,直至将本次待发送数据入队完成。
105、第一个状态发送任务在被应用程序模块唤醒后,记录当前新数据入队指针,从第一个状态指针当前所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件。
在一种实施例中,所述步骤105的具体实现方法包括:第一个状态发送任务在被唤醒后,记录发送队列当前新数据入队指针的位置,从第一个状态指针当前所指向的数据开始发送,每发送一个数据,将所述第一个状态指针指向发送队列中存放数据的下一个位置,判断所述第一个状态指针与所述记录的当前新数据入队指针的位置是否相同,如果不相同,则继续发送当前第一个状态指针指向的数据,如果相同则完成本次发送任务。
106、接收任务接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的下一个状态后,本文中将该下一个状态表述为第m个状态,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程。
107、执行第m个状态发送任务。
图2所示为所述第m个状态发送任务对应的发送流程图;其中m为大于等于2、小于等于n的正整数,参见图2,所述第m个状态发送任务对应的发送流程包括如下步骤:
201、将发送队列中的第m个状态指针指向的已发送数据作为当前数据。
202、判断当前数据的状态是否为第m个状态,如果是则执行下一步骤,否则结束本发送流程。
203、发送当前数据的第m个状态对应需发送的交互指令数据,将所述第m个状态的指针指向发送队列中存放数据的下一个位置。
204、判断该第m个状态是否为最后一个状态,如果是则进一步将当前数据移出所述队列,结束本流程;否则执行下一步骤。
205、判断第m个状态指针与第m-1个状态指针所指的位置是否相同,如果是则结束本发送流程,否则返回步骤201。
通过上述步骤,对于交互数据的每一个状态,只有收到该状态的交互指令数据才会触发下一状态的发送流程(如步骤203所述),因此保证了数据交互状态机的顺序执行。而通过上述步骤201至205,就可以从第m个状态指针的开始位置,向第m-1个状态指针所指的位置方向,逐个遍历其间的每个数据,发送每个数据的第m个状态对应需发送的交互指令数据,从而可以实现能够在发送数据具有状态机及要求发送不能乱序的情况下,可以直接在本发明的发送机制中完成数据发送,减小增加新模块来解决该需求的开销,提高设备的工作效率,提高软件的可维护性。
在一种实施例中,本步骤106中,所述接收任务接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的第m个状态的具体方法为:接收任务接收目的数据接收部件返回的交互指令数据,该交互指令数据中包含其对应的已发送数据的数据编号,之后根据该交互指令数据中携带的数据编号确定该交互指令所对应的发送队列中的已发送数据,在所述发送数据中记录返回该交互指令数据的数据接收部件标记,并根据所述已发送数据中携带的目的数据接收部件信息,判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,如果是则根据所述已发送数据的当前状态,假设为第m-1个状态,判断需进入下一个状态即第m个状态,然后执行后续的流程即将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程,否则继续接收该已发送数据对应的目的数据接收部件的交互指令数据。
通过上述处理,只有待发送数据所关心的所有目的分布式部件返回交互指令数据后才会触发下一个状态的发送流程。因此可以在各个分布式部件返回交互指令数据的速度各不一样时,也能保证待发送数据顺序处理和状态的变化。
在一种实施例中,步骤106中,所述记录返回交互指令数据的数据接收部件标记,具体包括:用位图表征每个已发送数据对应的目的数据接收部件是否返回交互指令数据,在收到一个目的数据接收部件返回的交互指令数据后,在对应已发送数据中将返回交互指令数据的目的数据接收部件位图对应的比特位置1;
所述已发送数据中携带的目的数据接收部件信息,是指应用程序模块在将已发送数据入队到发送队列之前,在已发送数据中用位图表征该发送数据对应的目的数据接收部件,将需要接收该已发送数据的目的数据接收部件位图对应的比特位置1;
所述判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,具体包括:判断该已发送数据对应的目的数据接收部件位图是否和返回交互指令数据的目的数据接收部件位图相同,如果相同则判定收到该已发送数据对应的所有目的数据接收部件的交互指令数据,否则判定还没有收到该已发送数据对应的所有目的数据接收部件的交互指令数据。
下面以一个具体的具有状态机,且需要顺序发送的数据报文的发送方法为具体实施例,对本发明做进一步的说明。
在该具体实施例中,所述的数据发送部件为所述分布式网络通信设备的主控卡,所述数据接收部件为所述分布式网络通信设备的线卡。图3为在该实施例中所假设的数据交互(下面简称数据)的状态机示意图。参见图3,该数据具有3个状态,分别是初始化状态(INIT,第1个状态)、发送未确认状态(SEND_NO_ACK,第2个状态)、发送完成状态(SEND_OK,第3个状态)。
首先,需要创建一个发送队列,定义长度为1024,并设置3个状态指针:pInit、pSendNoAck和pSendOk,以及设置当前新数据入队指针pCurrent。所述pInit为第1个状态指针;所述pSendNoAck为第2个状态指针,所述pSendOk为第3个状态的指针,所述各个指针全都初始化为0。
其次,需要在程序中创建并运行和所述状态机的各状态以及3个状态指针分别对应的3个状态发送任务;还要创建用于接收来自数据接收部件的交互指令数据的接收任务。数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列,当应用程序模块每入队一个数据到发送队列中有新数据入队时,则设置该新入队数据的状态为INIT,并将所述当前新数据入队指针pCurrentinit移到发送队列的下一个位置;应用程序模块将本次待发数据入队完成后,并唤醒第一个状态发送任务。当队列是以数组结构组织时,其中第一个新数据入队的方式是从数组队列下标0开始入队,并且给入队的数据成员标上序列号,当序列号为1024时又从数组队列下标0开始入,如此往复,并且第1个队列状态指针和当前最新入队的指针是和序列号相对应的,其中所述pCurrent指针指向新入队数据的位置,例如新入队数据的下标为4,则pCurrent指针也为4。
当第一个状态发送任务被唤醒后,记录当前新数据入队指针pCurrent,从第一个状态指针当前所指向的数据开始遍历(第一次被唤醒时指向下标0所在的数据),到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件。第一个状态发送任务每发送一个数据,将对应的第一个状态指针pInit移动到发送队列中存放待发送数据的下一个位置。
然后,接收任务接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的下一个状态即第m个状态后,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程。
具体的,当接收任务判断当前接收的所有目的数据接收部件返回的交互指令数据对应的已发送数据的当前状态为INIT状态,则需进入第二个状态即所述SEND_NO_ACK状态,此时需要将该已发送数据的状态更新为SEND_NO_ACK状态,唤醒SEND_NO_ACK状态的对应的发送任务。
图4为本发明所述实施例中SEND_NO_ACK状态对应的发送任务的发送流程图。参见图4,该流程包括:
401、将发送队列中的psendNoAck状态指针指向的已发送数据作为当前数据;
402、判断当前数据的状态是否为SEND_NO_ACK状态,如果是则执行下一步骤,否则结束本发送流程;
403、发送当前数据的SEND_NO_ACK状态对应需发送的交互指令数据到目的接收部件,将对应的psendNoAck状态指针指向发送队列中存放数据的下一个位置;
404、判定该SEND_NO_ACK状态不是最后一个状态,执行下一步骤。
405、判断psendNoAck状态指针与pinit状态指针所指的位置是否相同,如果是则结束本发送流程,否则返回步骤401。
如果接收任务判断当前接收的所有目的数据接收部件返回的交互指令数据对应的已发送数据的当前状态为SEND_NO_ACK状态,则需进入第3个状态即所述SEND OK状态,此时接收任务需要将该已发送数据的状态更新为SEND_OK状态,唤醒SEND_OK状态的对应的发送任务。
图5为本发明所述实施例中SEND_OK状态对应发送任务的发送流程图。参见图5,该流程包括:
501、将发送队列中的psendOK状态指针指向的已发送数据作为当前数据;
502、判断当前数据的状态是否为SEND_OK状态,如果是则执行下一步骤,否则结束本发送流程;
503、发送当前数据的SEND_OK状态对应需发送的交互指令数据,并将psendOK状态指针指向发送队列中存放数据的下一个位置;
504、判定SEND_OK状态为最后一个状态,将当前数据移出所述队列,结束本流程。
通过上述步骤,可以实现能够在发送数据具有状态机及要求发送不能乱序的情况下,可以直接在发送机制中完成数据发送,减小增加新模块来解决该需求的开销,提高设备的工作效率,提高软件的可维护性。
与本发明所述的方法对应,本发明还公开了一种数据通信中的数据发送装置。应用于分布式的网络通信设备中的数据发送部件中,所述数据发送部件和对应的数据接收部件间的数据发送交互流程的状态机包括n个状态,n为大于等于2的正整数。图6为本发明所述数据通信中的数据发送装置的一种组成示意图;参见图6,该装置包括:
发送队列创建模块601,用于设置和所述状态机的各状态分别对应的n个状态指针以及当前新数据入队指针,并将所述指针初始化为指向发送队列的第一个数据;
发送任务创建模块602,用于创建和所述状态机的各状态分别对应的n个状态发送任务模块;
接收任务创建模块603,用于创建用于接收来自数据接收部件的交互指令数据的接收任务模块;
入队模块604,用于在数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列,并唤醒第一个状态发送任务模块605;
第一个状态发送任务模块605,用于在被唤醒后,记录当前新数据入队指针,从第一个状态指针当前所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件;
接收任务模块606,用于接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的下一个状态即第m个状态后,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务模块,所述m为大于等于2、小于等于n的正整数;
本发明的发送装置还包括m个状态发送任务模块,其中,所述第m个状态发送任务模块包括如下单元,:
第一单元,用于将发送队列中的第m个状态指针指向的已发送数据作为当前数据;
第二单元,用于判断当前数据的状态是否为第m个状态,如果是则执行下一单元,否则结束本发送任务;
第三单元,用于发送当前数据的第m个状态对应需发送的交互指令数据,将所述第m个状态的指针指向发送队列中存放数据的下一个位置;
第四单元,用于判断该第m个状态是否为最后一个状态,是则进一步将当前数据移出所述队列,结束本发送任务,否则执行下一单元;
第五单元,用于判断第m个状态指针与第m-1个状态指针所指的位置是否相同,如果是则结束本发送任务,否则返回第一单元。
在一种实施例中,所述入队模块604具体用于:将数据发送部件的应用程序模块待发送数据的状态设置为第一个状态,并将待发送数据依次入队到发送队列,并在每入队一个数据后,移动当前新数据入队指针到发送队列中存放数据的下一个位置,直至将本次待发送数据入队完成,唤醒第一个状态发送任务。
在另一种实施例中,所述第一个状态发送任务模块605具体用于:在被唤醒后,记录发送队列当前新数据入队指针的位置,从第一个状态指针当前所指向的数据开始发送,每发送一个数据,将所述第一个状态指针指向发送队列中存放数据的下一个位置,判断所述第一个状态指针与所述记录的当前新数据入队指针的位置是否相同,如果不相同,则继续发送当前第一个状态指针指向的数据,如果相同则完成本次发送任务。
在另一种实施例中,所述接收任务模块606具体用于:接收目的数据接收部件返回的交互指令数据,根据该交互指令数据中携带的数据编号确定该交互指令所对应的发送队列中的已发送数据,在所述发送数据中记录返回该交互指令数据的数据接收部件标记,并根据所述已发送数据中携带的目的数据接收部件信息,判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,如果是则根据所述已发送数据的当前状态m-1,判断需进入第m个状态,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程,否则继续接收该已发送数据对应的目的数据接收部件的交互指令数据。
在所述接收任务模块606的运行过程中,所述记录返回该交互指令数据的数据接收部件标记,具体包括:用位图表征每个已发送数据对应的目的数据接收部件是否返回交互指令数据,在收到一个目的数据接收部件返回的交互指令数据后,在对应已发送数据中将返回交互指令数据的目的数据接收部件位图对应的比特位置1;
所述已发送数据中携带的目的数据接收部件信息,是指应用程序模块在将已发送数据入队到发送队列之前,在已发送数据中用位图表征该发送数据对应的目的数据接收部件,将需要接收该已发送数据的目的数据接收部件位图对应的比特位置1;
所述判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,具体包括:判断该已发送数据对应的目的数据接收部件位图是否和返回交互指令数据的目的数据接收部件位图相同,如果相同则判定收到该已发送数据对应的所有目的数据接收部件的交互指令数据,否则判定还没有收到该已发送数据对应的所有目的数据接收部件的交互指令数据。
在一种实施例中,所述的数据发送部件为所述分布式网络通信设备的主控卡,所述数据接收部件为所述分布式网络通信设备的线卡。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (10)
1.一种数据通信中的数据发送方法,应用于分布式的网络通信设备中,其特征在于,该方法中数据发送部件和数据接收部件间的数据发送交互流程的状态机包括n个状态,n为大于等于2的正整数;该方法包括:
创建发送队列,设置和所述状态机的各状态分别对应的n个状态指针以及当前新数据入队指针,并将所述指针初始化为指向发送队列的第一个数据;
创建和所述状态机的各状态分别对应的n个状态发送任务;
创建用于接收来自数据接收部件的交互指令数据的接收任务;
数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列,并唤醒第一个状态发送任务;
第一个状态发送任务在被唤醒后,记录当前新数据入队指针,从第一个状态指针当前所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件;
接收任务接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的下一个状态即第m个状态后,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程;
其中,所述第m个状态发送任务对应的发送流程包括如下步骤,m为大于等于2、小于等于n的正整数:
A、将发送队列中的第m个状态指针指向的已发送数据作为当前数据;
B、判断当前数据的状态是否为第m个状态,如果是则执行下一步骤,否则结束本发送流程;
C、发送当前数据的第m个状态对应需发送的交互指令数据,将所述第m个状态的指针指向发送队列中存放数据的下一个位置;
D、判断该第m个状态是否为最后一个状态,如果是则进一步将当前数据移出所述队列,结束本流程;否则执行下一步骤;
E、判断第m个状态指针与第m-1个状态指针所指的位置是否相同,如果是则结束本发送流程,否则返回步骤A。
2.根据权利要求1所述的方法,其特征在于,数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列的具体方法为:
将数据发送部件的应用程序模块待发送数据的状态设置为第一个状态,并将待发送数据依次入队到发送队列,并在每入队一个数据后,移动当前新数据入队指针到发送队列中存放数据的下一个位置,直至将本次待发送数据入队完成。
3.根据权利要求1所述的方法,其特征在于,第一个状态发送任务在被唤醒后,记录当前新数据入队指针,从第一个状态指当前针所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件,具体包括:
第一个状态发送任务在被唤醒后,记录发送队列当前新数据入队指针的位置,从第一个状态指针当前所指向的数据开始发送,每发送一个数据,将所述第一个状态指针指向发送队列中存放数据的下一个位置,判断所述第一个状态指针与所述记录的当前新数据入队指针的位置是否相同,如果不相同,则继续发送当前第一个状态指针指向的数据,如果相同则完成本次发送任务。
4.根据权利要求1所述的方法,其特征在于,接收任务接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的第m个状态的具体方法为:
接收任务接收目的数据接收部件返回的交互指令数据,根据该交互指令数据中携带的数据编号确定该交互指令所对应的发送队列中的已发送数据,在所述发送数据中记录返回该交互指令数据的数据接收部件标记,并根据所述已发送数据中携带的目的数据接收部件信息,判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,如果是则根据所述已发送数据的当前状态即第m-1状态,判断需进入下一状态即第m个状态,执行后续的流程,否则继续接收该已发送数据对应的目的数据接收部件的交互指令数据。
5.根据权利要求4所述的方法,其特征在于,
所述记录返回该交互指令数据的数据接收部件标记,具体包括:用位图表征每个已发送数据对应的目的数据接收部件是否返回交互指令数据,在收到一个目的数据接收部件返回的交互指令数据后,在对应已发送数据中将返回交互指令数据的目的数据接收部件位图对应的比特位置1;
所述已发送数据中携带的目的数据接收部件信息,是指应用程序模块在将已发送数据入队到发送队列之前,在已发送数据中用位图表征该发送数据对应的目的数据接收部件,将需要接收该已发送数据的目的数据接收部件位图对应的比特位置1;
所述判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,具体包括:判断该已发送数据对应的目的数据接收部件位图是否和返回交互指令数据的目的数据接收部件位图相同,如果相同则判定收到该已发送数据对应的所有目的数据接收部件的交互指令数据,否则判定还没有收到该已发送数据对应的所有目的数据接收部件的交互指令数据。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述的数据发送部件为所述分布式网络通信设备的主控卡,所述数据接收部件为所述分布式网络通信设备的线卡。
7.一种数据通信中的数据发送装置,应用于分布式的网络通信设备中的数据发送部件中,其特征在于,所述数据发送部件和对应的数据接收部件间的数据发送交互流程的状态机包括n个状态,n为大于等于2的正整数;该装置包括:
发送队列创建模块,用于设置和所述状态机的各状态分别对应的n个状态指针以及当前新数据入队指针,并将所述指针初始化为指向发送队列的第一个数据;
发送任务创建模块,用于创建和所述状态机的各状态分别对应的n个状态发送任务模块;
接收任务创建模块,用于创建用于接收来自数据接收部件的交互指令数据的接收任务模块;
入队模块,用于在数据发送部件的应用程序模块有数据要发送时,将待发送的数据入队到所述发送队列,并唤醒第一个状态发送任务模块;
第一个状态发送任务模块,用于在被唤醒后,记录当前新数据入队指针,从第一个状态指针当前所指向的数据开始遍历,到记录的当前新数据入队指针指向的数据的前一个数据遍历结束,依次发送遍历的数据到数据接收部件;
接收任务模块,用于接收目的数据接收部件返回的交互指令数据,确定该交互指令数据所对应的发送队列中的已发送数据及需进入的下一个状态即第m个状态后,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务模块,所述m为大于等于2、小于等于n的正整数;
m个状态发送任务模块,其中,第m个状态发送任务模块包括如下单元,:
第一单元,用于将发送队列中的第m个状态指针指向的已发送数据作为当前数据;
第二单元,用于判断当前数据的状态是否为第m个状态,如果是则执行下一单元,否则结束本发送任务;
第三单元,用于发送当前数据的第m个状态对应需发送的交互指令数据,将所述第m个状态的指针指向发送队列中存放数据的下一个位置;
第四单元,用于判断该第m个状态是否为最后一个状态,是则进一步将当前数据移出所述队列,结束本发送任务,否则执行下一单元;
第五单元,用于判断第m个状态指针与第m-1个状态指针所指的位置是否相同,如果是则结束本发送任务,否则返回第一单元。
8.根据权利要求7所述的装置,其特征在于,所述入队模块具体用于:
将数据发送部件的应用程序模块待发送数据的状态设置为第一个状态,并将待发送数据依次入队到发送队列,并在每入队一个数据后,移动当前新数据入队指针到发送队列中存放数据的下一个位置,直至将本次待发送数据入队完成,唤醒第一个状态发送任务。
9.根据权利要求7所述的装置,其特征在于,所述第一个状态发送任务模块具体用于:
在被唤醒后,记录发送队列当前新数据入队指针的位置,从第一个状态指针当前所指向的数据开始发送,每发送一个数据,将所述第一个状态指针指向发送队列中存放数据的下一个位置,判断所述第一个状态指针与所述记录的当前新数据入队指针的位置是否相同,如果不相同,则继续发送当前第一个状态指针指向的数据,如果相同则完成本次发送任务。
10.根据权利要求7所述的装置,其特征在于,所述接收任务模块具体用于:
接收目的数据接收部件返回的交互指令数据,根据该交互指令数据中携带的数据编号确定该交互指令所对应的发送队列中的已发送数据,在所述发送数据中记录返回该交互指令数据的数据接收部件标记,并根据所述已发送数据中携带的目的数据接收部件信息,判断当前是否收到所述已发送数据对应的所有目的数据接收部件的交互指令数据,如果是则根据所述已发送数据的当前状态m-1,判断需进入第m个状态,将所述已发送数据的状态更新为第m个状态,并唤醒第m个状态发送任务对应的发送流程,否则继续接收该已发送数据对应的目的数据接收部件的交互指令数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210497455.XA CN102984086B (zh) | 2012-11-29 | 2012-11-29 | 数据通信中的数据发送方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210497455.XA CN102984086B (zh) | 2012-11-29 | 2012-11-29 | 数据通信中的数据发送方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102984086A true CN102984086A (zh) | 2013-03-20 |
CN102984086B CN102984086B (zh) | 2015-10-28 |
Family
ID=47857844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210497455.XA Active CN102984086B (zh) | 2012-11-29 | 2012-11-29 | 数据通信中的数据发送方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102984086B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106341806A (zh) * | 2016-08-23 | 2017-01-18 | 冯村 | 基于级联状态机的通讯终端自适应通信方法、装置及系统 |
CN108509281A (zh) * | 2017-03-30 | 2018-09-07 | 北京云中融信网络科技有限公司 | 消息存储方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1592186A (zh) * | 2003-08-29 | 2005-03-09 | 华为技术有限公司 | 安全接入数据传输系统及方法 |
CN1690967A (zh) * | 2004-04-30 | 2005-11-02 | 华为技术有限公司 | 在通信队列管理中通过发送事件触发队列管理的方法 |
CN101145968A (zh) * | 2007-08-02 | 2008-03-19 | 中兴通讯股份有限公司 | 网管系统和传输设备间数据发送及接收方法 |
-
2012
- 2012-11-29 CN CN201210497455.XA patent/CN102984086B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1592186A (zh) * | 2003-08-29 | 2005-03-09 | 华为技术有限公司 | 安全接入数据传输系统及方法 |
CN1690967A (zh) * | 2004-04-30 | 2005-11-02 | 华为技术有限公司 | 在通信队列管理中通过发送事件触发队列管理的方法 |
CN101145968A (zh) * | 2007-08-02 | 2008-03-19 | 中兴通讯股份有限公司 | 网管系统和传输设备间数据发送及接收方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106341806A (zh) * | 2016-08-23 | 2017-01-18 | 冯村 | 基于级联状态机的通讯终端自适应通信方法、装置及系统 |
CN108509281A (zh) * | 2017-03-30 | 2018-09-07 | 北京云中融信网络科技有限公司 | 消息存储方法及装置 |
CN108509281B (zh) * | 2017-03-30 | 2021-05-04 | 北京云中融信网络科技有限公司 | 消息存储方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102984086B (zh) | 2015-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101873005B (zh) | 一种实现电能量均衡采集的方法 | |
US20100071008A1 (en) | System and method for transmitting an animated figure | |
CN103401909A (zh) | 基于bs的数据交互方法与系统、客户端及服务器 | |
CN104166384A (zh) | 一种家电互联互通底层传输的方法及专用装置 | |
CN105119691B (zh) | 一种以太网点到点可靠传输的方法 | |
CN105721547A (zh) | 协同处理业务的方法和装置 | |
CN103001843A (zh) | 基于嵌入式VxWorks的OPC协议转换器 | |
CN104253788A (zh) | 一种数据处理方法、客户端、页面引擎及系统 | |
CN1973282A (zh) | 用于管理针对集群配置的改变的系统和方法 | |
CN107181628A (zh) | 双向无线通信方法、装置和终端 | |
CN105137842A (zh) | 一种舞台自适应匹配装置 | |
CN102984086B (zh) | 数据通信中的数据发送方法和装置 | |
CN103746904A (zh) | 信息交互方法和装置 | |
CN106302432B (zh) | 一种基于车联网的通信装置及控制方法 | |
CN101958935B (zh) | 基于MiniGUI的嵌入式控制器远程监控系统及监控方法 | |
CN108243174A (zh) | 在线直播互动系统及方法 | |
CN102541539A (zh) | 一种基于m2m的供应链智能面板设计方法 | |
CN116546439B (zh) | 电子货架标签快速唤醒并发送群组消息的方法及系统 | |
CN205015660U (zh) | 一种舞台自适应匹配装置 | |
CN102043397A (zh) | 一种楼宇自动控制系统的网络通讯方法 | |
CN107479891A (zh) | 一种基于mvc模型数据处理系统及方法 | |
CN106230989A (zh) | 将实时连续产生的定位数据同步到服务器的方法和系统 | |
CN103929457A (zh) | 基于移动互联网的物联网应用数据交互系统和方法 | |
CN107070872A (zh) | 一种用于客户端的数据处理方法和装置 | |
CN106900024A (zh) | 用于数传电台自组网超远程数据传输的战术通信方法 |
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 |