專利名稱:任務(wù)間消息發(fā)送方法及通信設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)通信技術(shù),尤其涉及實(shí)時(shí)操作系統(tǒng)下多任務(wù)間的通信技術(shù)。
背景技術(shù):
計(jì)算機(jī)通信領(lǐng)域中,一個(gè)復(fù)雜的系統(tǒng)下,會(huì)把若干功能放在不同的任務(wù)里實(shí)現(xiàn)。一 個(gè)系統(tǒng)功能需要多個(gè)任務(wù)協(xié)調(diào)實(shí)現(xiàn),任務(wù)間需要交互一些必要的信息。任務(wù)間采用消息通 信是一種較為常用的任務(wù)交互方法,對(duì)于數(shù)量較小且實(shí)時(shí)性要求較高的消息,采用實(shí)時(shí)發(fā) 送的,即一個(gè)消息產(chǎn)生后則立即發(fā)送。對(duì)于具有相同屬性且數(shù)量較大的消息,為了提高通信 效率,通常采用批處理和延時(shí)發(fā)送機(jī)制。如,產(chǎn)生一個(gè)IPV4路由消息后,任務(wù)并不立即發(fā)送 該消息,而是延遲若干時(shí)間再發(fā)送,以便后續(xù)的IPV4路由消息能夠放在一個(gè)消息包里一次 性批量發(fā)送。但是,延時(shí)發(fā)送可能導(dǎo)致批量發(fā)送消息和實(shí)時(shí)發(fā)送消息的發(fā)送時(shí)序不能得到保 證。比如,在批量發(fā)送的延時(shí)時(shí)間到期前,任務(wù)需要發(fā)送一個(gè)實(shí)時(shí)消息,這個(gè)實(shí)時(shí)消息會(huì)立 即發(fā)送出去。然后批量消息延時(shí)時(shí)間到期,才發(fā)送批量消息,這樣,就存在批量消息延后實(shí) 時(shí)消息發(fā)送的問題,導(dǎo)致消息時(shí)序得不到保障。如果不能保證任務(wù)間交互的消息時(shí)序,就會(huì) 影響系統(tǒng)的穩(wěn)定運(yùn)行。因此,如何保證任務(wù)間交互消息的時(shí)序,是任務(wù)間消息通信一個(gè)非常重要的問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提供一種保證消息傳送時(shí)序的任務(wù)間消息發(fā)送方 法和通信設(shè)備。本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是,任務(wù)間消息發(fā)送方法,包括設(shè)置任意兩任務(wù)間產(chǎn)生的所有待發(fā)送消息分為批處理消息和非批處理消息兩類; 設(shè)置所有待發(fā)送消息存儲(chǔ)在一個(gè)公共的發(fā)送緩沖區(qū)中;當(dāng)有待發(fā)送的非批處理消息產(chǎn)生時(shí),先把發(fā)送緩沖區(qū)中的批處理消息發(fā)送完,然 后發(fā)送所述非批處理消息;當(dāng)有待發(fā)送的批處理消息產(chǎn)生時(shí),先存入發(fā)送緩沖區(qū)中,并啟動(dòng)延時(shí)發(fā)送定時(shí)器, 等延時(shí)定時(shí)器超時(shí)后將發(fā)送緩沖區(qū)中的批處理消息全部發(fā)送出去。具體的,發(fā)送所述非批處理消息時(shí),要先將所述非批處理消息存入發(fā)送緩沖區(qū)中, 然后再立即發(fā)送。具體的,在啟動(dòng)定時(shí)器的同時(shí)記錄批處理消息的消息屬性和消息長(zhǎng)度。在延時(shí)發(fā)送定時(shí)器超時(shí)前,有待發(fā)送的新的批處理消息產(chǎn)生時(shí),首先判斷所述新的批處理消息與發(fā) 送緩沖區(qū)中之前存入的批處理消息的消息屬性是否相同,如是,直接把所述新批處理消息 的實(shí)體內(nèi)容存儲(chǔ)到發(fā)送緩沖區(qū)里,并增加批處理消息的消息頭長(zhǎng)度;如否,所述新的批處理 消息直接存入發(fā)送緩沖區(qū),記錄該批處理消息的消息屬性和消息長(zhǎng)度。所述消息屬性包括 消息類型。
具體的,如發(fā)送緩沖區(qū)已滿,將發(fā)送緩沖區(qū)中的批處理消息立即發(fā)送,然后再將當(dāng) 前待發(fā)送的批處理消息存入發(fā)送緩沖區(qū)中。具體的,步驟d中先將發(fā)送緩沖區(qū)中的批處理消息發(fā)送完畢,再將產(chǎn)生的非批處 理消息從發(fā)送緩沖區(qū)的起始地址進(jìn)行組裝并立即發(fā)送。具體的,所述批處理消息是指消息量較大的消息屬性相同的消息;所述非批處理 消息是指消息量小,具有突發(fā)性、實(shí)時(shí)性的消息。本發(fā)明還提供一種實(shí)現(xiàn)上述任務(wù)間消息發(fā)送方法的通信設(shè)備,包括消息產(chǎn)生單元;用于產(chǎn)生待發(fā)送的批處理消息或者非批處理消息;當(dāng)產(chǎn)生非批處 理消息時(shí),先通知消息發(fā)送單元將發(fā)送緩沖區(qū)中的批處理消息發(fā)送完,再將所述非批處理 消息存入發(fā)送緩沖區(qū)并通知消息發(fā)送單 元發(fā)送;當(dāng)產(chǎn)生批處理消息時(shí)存入發(fā)送緩沖區(qū);發(fā)送緩沖區(qū)用于存儲(chǔ)任務(wù)間產(chǎn)生的所有待發(fā)送的批處理消息或非批處理消息;延時(shí)發(fā)送定時(shí)器單元用于批處理消息存入緩沖區(qū)的起始地址時(shí),設(shè)置批處理消 息的發(fā)送周期,在定時(shí)器超時(shí)后向消息發(fā)送單元發(fā)送觸發(fā)通知;消息發(fā)送單元用于發(fā)送緩沖區(qū)中的非批處理消息和批處理消息。具體的,所述消息產(chǎn)生單元還包括一個(gè)消息記錄單元,用于記錄存入發(fā)送緩沖區(qū) 的批處理消息的消息屬性和消息長(zhǎng)度。具體的,所述消息產(chǎn)生單元還包括一個(gè)消息處理單元,用于當(dāng)判斷發(fā)送緩沖區(qū)已 滿時(shí),通知消息發(fā)送單元將發(fā)送緩沖區(qū)中的批處理消息發(fā)送完畢,再將新產(chǎn)生的批處理消 息存入發(fā)送緩沖區(qū)。具體的,所述消息處理單元,還用于判斷新產(chǎn)生的批處理消息是否和發(fā)送緩沖區(qū) 中已存入的批處理消息屬性相同,并進(jìn)行相應(yīng)的組裝處理。如新產(chǎn)生的批處理消息和發(fā)送 緩沖區(qū)中已存入的批處理消息屬性相同,直接把所述新的批處理消息的實(shí)體內(nèi)容存儲(chǔ)到發(fā) 送緩沖區(qū)里,并增加之前存入的批處理消息的消息頭長(zhǎng)度;否則,將所述新的批處理消息直 接存入發(fā)送緩沖區(qū),記錄該批處理消息的消息屬性和消息長(zhǎng)度并重新啟動(dòng)定時(shí)器。本發(fā)明的有益效果是,在兼顧通信效率的同時(shí),保證了任務(wù)間消息的時(shí)序,使得系 統(tǒng)更加穩(wěn)定可靠。
圖1是本發(fā)明的非批處理消息發(fā)送流程圖;圖2是本發(fā)明的批處理消息發(fā)送流程圖。圖3是本發(fā)明實(shí)施例的批處理消息在發(fā)送緩沖區(qū)中的示意圖;圖4是本發(fā)明實(shí)施例的非批處理消息在發(fā)送緩沖區(qū)中的示意圖;圖5是本發(fā)明通信設(shè)備結(jié)構(gòu)示意圖;圖6是本發(fā)明通信設(shè)備實(shí)施例1的結(jié)構(gòu)示意圖;圖7是本發(fā)明通信設(shè)備實(shí)施例2的結(jié)構(gòu)示意圖。
具體實(shí)施例方式本發(fā)明的任務(wù)間消息發(fā)送方法可應(yīng)用于任意的兩個(gè)任務(wù)之間。本發(fā)明的實(shí)現(xiàn)方案 如下設(shè)置任務(wù)間產(chǎn)生的所有待發(fā)送消息分為批處理消息和非批處理消息兩類;并設(shè)置所有待發(fā)送消息存儲(chǔ)在一個(gè)公共的發(fā)送緩沖區(qū)buffer中。當(dāng)有待發(fā)送的非批處理消息產(chǎn)生時(shí),發(fā)送非批處理消息的流程如圖1所示首先查看buffer里是否有緩沖的非批處理消息,如果是,則立即把buffer里存儲(chǔ)的非批處理消 息內(nèi)容發(fā)送出去;然后從buffer的起始地址來(lái)組裝新消息并立即發(fā)送。當(dāng)有待發(fā)送的批處理消息產(chǎn)生時(shí),發(fā)送批處理消息的流程如圖3所示,首先判斷buffer是否已滿如果buffer已滿,則立即把buffer里存儲(chǔ)的批處理消息發(fā)送出去,然后從buffer的起始地址來(lái)組裝當(dāng)前產(chǎn)生的批處理消息,并記錄消息屬性(能夠唯一確定一個(gè)消息的信 息,比如消息類型)和消息長(zhǎng)度,啟動(dòng)一個(gè)延時(shí)發(fā)送定時(shí)器;如果buffer未滿,則判斷buffer中是否已存有批處理消息,如已存有批處理消息,則進(jìn)一步判斷當(dāng)前產(chǎn)生的批處理消息和buffer里放置的最后一個(gè)批處理消息的屬性 是否相同,如果相同,則不需要添加消息頭部信息,直接把消息實(shí)體內(nèi)容存儲(chǔ)到buffer里, 把消息的長(zhǎng)度加上原來(lái)的消息長(zhǎng)度,記錄下這個(gè)總的消息長(zhǎng)度并更新消息頭部信息中的消 息長(zhǎng)度為該總長(zhǎng)度值;如果當(dāng)前產(chǎn)生的批處理消息與buffer里放置的最后一個(gè)消息的屬 性不相同,則作為一個(gè)新的批處理消息直接添加到buffer里,重新記錄消息屬性和消息長(zhǎng) 度;如果判斷buffer未滿且未存有批處理消息,則將當(dāng)前產(chǎn)生的批處理消息存入 buffer的起始地址中,并記錄消息屬性和消息長(zhǎng)度,啟動(dòng)一個(gè)延時(shí)發(fā)送定時(shí)器;如延時(shí)發(fā)送定時(shí)器超時(shí)前,本任務(wù)沒有產(chǎn)生待發(fā)送的新消息,則等待延時(shí)發(fā)送定 時(shí)器超時(shí)后,把buffer里的批處理消息全部發(fā)送出去;如延時(shí)發(fā)送定時(shí)器超時(shí)前,本任務(wù) 又產(chǎn)生了一個(gè)待發(fā)送的新消息,如果新消息是非批處理消息,則立即把buffer里存儲(chǔ)的批 處理消息發(fā)送出去;然后從buffer的起始地址來(lái)組裝新的非批處理消息并立即發(fā)送。如果 新消息是批處理消息,則回到以上發(fā)送流程的初始判斷步驟。下面結(jié)合具體的實(shí)施例子詳細(xì)描述本發(fā)明方案。以某個(gè)動(dòng)態(tài)路由協(xié)議任務(wù)和路由管理任務(wù)間的通信為例,將兩個(gè)任務(wù)間的消息分 為批處理消息和非批處理消息兩類。如將路由消息歸為批處理消息,該批處理消息又分 為IPV4路由消息和IPV6路由消息兩種類型;將系統(tǒng)的接口狀態(tài)變化消息歸為非批處理消 息。設(shè)置所有產(chǎn)生的待發(fā)送消息存儲(chǔ)在一個(gè)公共的發(fā)送緩沖區(qū)(buffer)來(lái)組裝消息報(bào)文 內(nèi)容,等待發(fā)送。當(dāng)動(dòng)態(tài)路由協(xié)議任務(wù)首先產(chǎn)生的待發(fā)送消息為批處理消息時(shí),將該批處理消息存 入緩沖區(qū)后,啟動(dòng)一個(gè)延時(shí)發(fā)送定時(shí)器,即使后續(xù)緩沖區(qū)中還存入有其它批量消息,但是所 有批處理消息的發(fā)送采用統(tǒng)一的一個(gè)延時(shí)發(fā)送定時(shí)器。如圖3所示,多個(gè)批處理消息依順 序臨時(shí)存儲(chǔ)在buffer (1)里,IPV4批處理消息的消息頭(2)以及多個(gè)IPV4路由消息內(nèi)容 (3)形成的IPV4批處理消息存儲(chǔ)在buffer起始地址,另一個(gè)消息屬性的批處理消息順序存 儲(chǔ)在IPV4批處理消息之后,S卩,由IPV6批處理消息的消息頭(4)以及多個(gè)IPV6路由消息 內(nèi)容(5)形成的IPV6批處理消息;當(dāng)buffer裝滿后立即發(fā)送IPV4批處理消息與IPV6批 處理消息,否則需要等待批處理消息對(duì)應(yīng)的延時(shí)發(fā)送定時(shí)器超時(shí)后再發(fā)送。非批處理消息 在buffer組裝后立即發(fā)送,如圖4所示,作為非批處理消息接口狀態(tài)消息由接口狀態(tài)消息 頭(6)以及接口狀態(tài)消息內(nèi)容(7)組成,組裝后存儲(chǔ)在buffer起始地址,然后再發(fā)送。對(duì)端路由管理任務(wù)接收到動(dòng)態(tài)路由協(xié)議任務(wù)的消息報(bào)文后,讀出固定長(zhǎng)度的消息頭部,從消息頭部讀取消息屬性和消息長(zhǎng)度,該消息屬性中包括消息類型,然后根據(jù)消息長(zhǎng)度,把消息 內(nèi)容讀取出來(lái)。這樣就把一個(gè)完整的消息讀取出來(lái)了。本發(fā)明區(qū)別于現(xiàn)有技術(shù)優(yōu)先發(fā)送非批處理消息的方式,采用發(fā)送非批處理消息之 前,優(yōu)先發(fā)送之前存入的批處理消息的方式,保證了時(shí)序的正常;另一方面,在延時(shí)發(fā)送定 時(shí)器超時(shí)前,如無(wú)新的非批處理消息產(chǎn)生,存入發(fā)送緩沖區(qū)的批處理消息仍處于待發(fā)送狀 態(tài),以便能與后續(xù)相同屬性的批處理消息一起,一次性批量發(fā)送,保證了通信效率。本發(fā)明還提出了一種通信設(shè)備。圖5是本發(fā)明一個(gè)實(shí)施例提出的通信設(shè)備的結(jié)構(gòu) 示意圖。參見圖5,通信設(shè)備包括消息產(chǎn)生單元;用于產(chǎn)生待發(fā)送的批處理消息或者非批處理消息;當(dāng)產(chǎn)生非批處 理消息時(shí),先通知消息發(fā)送單元將發(fā)送緩沖區(qū)中的批處理消息發(fā)送完,再將所述非批處理 消息存入發(fā)送緩沖區(qū)并通知消息發(fā)送單元發(fā)送;當(dāng)產(chǎn)生批處理消息時(shí)存入發(fā)送緩沖區(qū);發(fā)送緩沖區(qū)用于存儲(chǔ)任務(wù)間產(chǎn)生的所有待發(fā)送的批處理消息或非批處理消息;延時(shí)發(fā)送定時(shí)器單元用于批處理消息存入緩沖區(qū)的起始地址時(shí),設(shè)置批處理消 息的發(fā)送周期,在定時(shí)器超時(shí)后向消息發(fā)送單元發(fā)送觸發(fā)通知;消息發(fā)送單元用于發(fā)送緩沖區(qū)中的非批處理消息和批處理消息。本發(fā)明通信設(shè)備實(shí)施例1的結(jié)構(gòu)框圖見圖6,其中消息產(chǎn)生單元還包括一個(gè)消息 記錄單元,用于記錄存入發(fā)送緩沖區(qū)的批處理消息的消息屬性和消息長(zhǎng)度。本發(fā)明通信設(shè)備實(shí)施例2的結(jié)構(gòu)框圖見圖7,其中消息產(chǎn)生單元包括一個(gè)消息記 錄單元,用于記錄存入發(fā)送緩沖區(qū)的批處理消息的消息屬性和消息長(zhǎng)度。一個(gè)消息處理單 元,用于當(dāng)判斷發(fā)送緩沖區(qū)中已滿時(shí),通知消息發(fā)送單元將發(fā)送緩沖區(qū)中的批處理消息發(fā) 送完畢,再將新產(chǎn)生的批處理消息存入發(fā)送緩沖區(qū)。所述消息處理單元,還用于判斷新產(chǎn) 生的批處理消息是否和發(fā)送緩沖區(qū)中已存入的批處理消息屬性相同,并進(jìn)行相應(yīng)的組裝處 理。
權(quán)利要求
任務(wù)間消息發(fā)送方法,其特征在于,包括設(shè)置任意兩任務(wù)間產(chǎn)生的所有待發(fā)送消息分為批處理消息和非批處理消息兩類;并設(shè)置所有待發(fā)送消息存儲(chǔ)在一個(gè)公共的發(fā)送緩沖區(qū)中;當(dāng)有待發(fā)送的非批處理消息產(chǎn)生時(shí),先把發(fā)送緩沖區(qū)中的批處理消息發(fā)送完,然后發(fā)送所述非批處理消息;當(dāng)有待發(fā)送的批處理消息產(chǎn)生時(shí),先存入發(fā)送緩沖區(qū)中,并啟動(dòng)延時(shí)發(fā)送定時(shí)器,等延時(shí)定時(shí)器超時(shí)后將發(fā)送緩沖區(qū)中的批處理消息全部發(fā)送出去。
2.如權(quán)利要求1所述任務(wù)間消息發(fā)送方法,其特征在于,發(fā)送所述非批處理消息時(shí),要 先將所述非批處理消息存入發(fā)送緩沖區(qū)中,然后再立即發(fā)送。
3.如權(quán)利要求1所述任務(wù)間消息發(fā)送方法,其特征在于,步驟d中,將批處理消息存入 發(fā)送緩沖區(qū)的同時(shí)記錄批處理消息的消息屬性和消息長(zhǎng)度;所述延時(shí)發(fā)送定時(shí)器超時(shí)前, 有待發(fā)送的新的批處理消息產(chǎn)生時(shí),首先判斷所述新批處理消息與發(fā)送緩沖區(qū)中之前存入 的批處理消息的消息屬性是否相同,如是,直接把所述新的批處理消息的實(shí)體內(nèi)容存儲(chǔ)到 發(fā)送緩沖區(qū)里,并增加之前存入的批處理消息的消息頭長(zhǎng)度;如否,將所述新的批處理消息 直接存入發(fā)送緩沖區(qū),記錄該批處理消息的消息屬性和消息長(zhǎng)度。
4.如權(quán)利3所述任務(wù)間消息發(fā)送方法,其特征在于,所述消息屬性包括消息類型。
5.如1-4任意一項(xiàng)權(quán)利要求所述任務(wù)間消息發(fā)送方法,其特征在于,當(dāng)有待發(fā)送的批 處理消息產(chǎn)生時(shí),需要先判斷發(fā)送緩沖區(qū)是否已滿,如發(fā)送緩沖區(qū)已滿,將發(fā)送緩沖區(qū)中的 批處理消息立即發(fā)送,然后將當(dāng)前待發(fā)送的批處理消息存入發(fā)送緩沖區(qū)中。
6.如權(quán)利5所述任務(wù)間消息發(fā)送方法,其特征在于,所述批處理消息是指消息量較大 的消息屬性相同的消息;所述非批處理消息是指消息量小,具有突發(fā)性、實(shí)時(shí)性的消息。
7.一種通信設(shè)備,其特征在于,包括消息產(chǎn)生單元,用于產(chǎn)生待發(fā)送的批處理消息或非批處理消息;當(dāng)產(chǎn)生非批處理消息 時(shí),先通知消息發(fā)送單元將發(fā)送緩沖區(qū)中的批處理消息發(fā)送完,再將所述非批處理消息存 入發(fā)送緩沖區(qū)并通知消息發(fā)送單元發(fā)送;當(dāng)產(chǎn)生批處理消息時(shí)存入發(fā)送緩沖區(qū);發(fā)送緩沖區(qū),用于存儲(chǔ)任務(wù)間產(chǎn)生的所有待發(fā)送的批處理消息或非批處理消息;延時(shí)發(fā)送定時(shí)器單元,用于批處理消息存入緩沖區(qū)的起始地址時(shí),設(shè)置批處理消息的 發(fā)送周期,在定時(shí)器超時(shí)后向消息發(fā)送單元發(fā)送通知;消息發(fā)送單元,用于發(fā)送緩沖區(qū)中的非批處理消息或批處理消息。
8.如權(quán)利要求7所述的通信設(shè)備,其特征在于,所述消息產(chǎn)生單元包括一個(gè)消息記錄 單元,用于記錄存入發(fā)送緩沖區(qū)的批處理消息的消息屬性和消息長(zhǎng)度。
9.如權(quán)利要求7或8所述的通信設(shè)備,其特征在于,所述消息產(chǎn)生單元包括一個(gè)消息處 理單元,用于當(dāng)判斷發(fā)送緩沖區(qū)已滿時(shí),通知消息發(fā)送單元將發(fā)送緩沖區(qū)中的批處理消息 發(fā)送完畢,再將新產(chǎn)生的批處理消息存入發(fā)送緩沖區(qū)。
10.如權(quán)利要求9所述的通信設(shè)備,其特征在于,所述消息處理單元,用于判斷新產(chǎn)生 的批處理消息是否和發(fā)送緩沖區(qū)中已存入的批處理消息屬性相同,如是,直接把所述新的 批處理消息的實(shí)體內(nèi)容存儲(chǔ)到發(fā)送緩沖區(qū)里,并增加之前存入的批處理消息的消息頭長(zhǎng) 度;如否,將所述新的批處理消息直接存入發(fā)送緩沖區(qū),記錄該批處理消息的消息屬性和消 息長(zhǎng)度并重新啟動(dòng)定時(shí)器。
全文摘要
本發(fā)明提供一種保證消息傳送時(shí)序的任務(wù)間消息發(fā)送方法和通信設(shè)備。包括設(shè)置任意兩任務(wù)間產(chǎn)生的所有待發(fā)送消息分為批處理消息和非批處理消息兩類;設(shè)置所有待發(fā)送消息存儲(chǔ)在一個(gè)公共的發(fā)送緩沖區(qū)中;當(dāng)有待發(fā)送的非批處理消息產(chǎn)生時(shí),先把發(fā)送緩沖區(qū)中的批處理消息發(fā)送完,然后發(fā)送所述非批處理消息;當(dāng)有待發(fā)送的批處理消息產(chǎn)生時(shí),先存入發(fā)送緩沖區(qū)中,并啟動(dòng)延時(shí)發(fā)送定時(shí)器,等延時(shí)定時(shí)器超時(shí)后將發(fā)送緩沖區(qū)中的批處理消息全部發(fā)送出去。本發(fā)明在兼顧通信效率的同時(shí),保證了任務(wù)間消息的時(shí)序,使得系統(tǒng)更加穩(wěn)定可靠。
文檔編號(hào)H04L12/56GK101815034SQ20101013348
公開日2010年8月25日 申請(qǐng)日期2010年3月26日 優(yōu)先權(quán)日2010年3月26日
發(fā)明者胡祖松 申請(qǐng)人:邁普通信技術(shù)股份有限公司