以下に、本願の開示する電文送信制御プログラム、通信装置及び電文送信制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[実施例2にかかる通信装置の構成]
次に、図2を用いて、実施例2にかかる通信装置100の構成を説明する。図2は、実施例2にかかる通信装置の構成を示すブロック図である。実施例2にかかる通信装置100は、記憶部110と、受信部120と、格納制御部130と、バッファ部140と、送信部150と、制御部160とを有する。
記憶部110は、例えば、半導体メモリ素子、又はハードディスクなどの記憶装置であり、滞留状況記憶部111と閾値記憶部112とを有する。さらに、記憶部110は、送信部と接続される通信装置の情報を格納する。滞留状況記憶部111は、各バッファ部の電文滞留状況を示す滞留状況管理レコードを記憶する。例えば、滞留状況記憶部111は、図3に示すように、バッファ部A141の滞留状況を示す滞留状況管理レコードAと、バッファ部Bの滞留状況を示す滞留状況管理レコードBと、バッファ部Cの滞留状況を示す滞留状況管理レコードCとを有する。なお、図3は、滞留状況記憶部が格納する情報の一例を示す図である。
ここで、図4を用いて、滞留状況管理レコードとして格納される情報の例を説明する。ここでは、一例として、滞留状況管理レコードAとして格納される情報について説明する。滞留状況管理レコードAには、図4に示すように、「バッファ部識別子」、「滞留電文数」、「滞留電文長」、「電文滞留時間」、「送信優先度」、「電文格納時刻」、「電文格納時刻先頭ポインタ」、「電文格納時刻末尾ポインタ」が対応付けて格納される。
「バッファ部識別子」は、バッファ部A141及びバッファ部A141と接続される送信部A151を一意に識別する情報である。また、「滞留電文数」は、バッファ部A141に存在する電文の総数を示す情報である。「滞留電文長」は、バッファ部A141に存在する電文の総電文長を示す情報である。「電文滞留時間」は、バッファ部A141の先頭に滞留している電文の格納時刻と、現在の時刻との差を示す情報である。「送信優先度」は、送信部A151の送信優先度を示す情報である。
「電文格納時刻」は、バッファ部A141に電文が格納された時刻を示す情報である。ここで、「電文格納時刻」は、「電文格納時刻0」、「電文格納時刻1」、「電文格納時刻n−1」を含む「電文格納時刻管理領域」として構成される。また、「電文格納時刻管理領域」は、サイクリックバッファとして使用される。言い換えると、「電文格納時刻管理領域」には、バッファ部A141に格納できる電文の最大数以上の電文格納時刻管理領域が設定される。そして、電文送信後には送信した電文の格納時刻が格納されていた「電文格納時刻領域」が再使用される。この結果、「電文格納時刻管理領域」には、バッファ部A141の電文格納回数に制限されることなく、バッファ部A141に電文が格納された時刻が格納される。
「電文格納時刻先頭ポインタ」は、バッファ部A141の先頭に位置する電文の格納時刻を示す情報である。ここで、例えば、「電文格納時刻管理領域」が「電文格納時刻0」から「電文格納時刻5」で構成される場合には、「電文格納時刻先頭ポインタ」は、「電文格納時刻5」の次には「電文格納時刻0」を示す。また、「電文格納時刻末尾ポインタ」は、バッファ部A141の末尾に位置する電文の格納時刻を示す情報である。ここで、例えば、「電文格納時刻管理領域」が「電文格納時刻0」から「電文格納時刻5」で構成される場合には、「電文格納時刻末尾ポインタ」は、「電文格納時刻5」の次には「電文格納時刻0」を示す。
例えば、滞留状況管理レコードAには、図4に示すように、「バッファ部識別子」が「A」で識別されるバッファ部の「滞留電文数」が「5」、「滞留電文長」が「640」、「電文滞留時間」が「500」、「送信優先度」が「低」であることを示す情報が格納される。
また、滞留状況管理レコードAには、「電文格納時刻0」が「3:12:43」、「電文格納時刻1」が「3:12:44」、「電文格納時刻n−1」が「3:12:xx」であることを示す情報が格納される。また、滞留状況管理レコードAには、「A」で識別されるバッファ部の先頭に格納された電文の格納時刻が「3:12:43」、末尾に格納された電文の格納時刻が「3:12:xx」であることを示す情報が格納される。なお、図4は、滞留状況管理レコードが格納する情報の一例を示す図である。また、滞留状況管理レコードB及び滞留状況管理レコードCは、滞留状況管理レコードAと同様の情報を格納するので詳細な説明を省略する。
閾値記憶部112は、バッファ部140に存在する電文が滞留しているか否かを判定する基準となる情報を記憶する。例えば、閾値記憶部112は、図5に示すように、「想定トランザクション量」と「送信部の数」と「最大1電文長」と「滞留電文数閾値」と「滞留電文長閾値」と「電文滞留時間閾値」とを記憶する。
ここで、図5に示す閾値記憶部112の「想定トランザクション量」は、想定される1秒当たりのトランザクション量を示す情報である。また、「送信部の数」は、送信部150に含まれる送信部の数を示す情報である。また、「最大1電文長」は、1電文当たりに許容できる電文長を示す情報である。また、「滞留電文数閾値」は、「想定トランザクション量/通信部の数」によって決定される滞留電文数の閾値を示す情報である。また、「滞留電文長閾値」は、「最大1電文長×想定トランザクション量/通信部の数」によって決定される滞留電文長の閾値を示す情報である。また、「電文滞留時間閾値」は、「通信部の数/想定トランザクション量」によって決定される電文滞留時間の閾値を示す情報である。
具体的には、図5に示す閾値記憶部112は、「想定トランザクション量」が「60」、「送信部の数」が「3」、「最大1電文長」が「300」であることを示す情報を記憶する。また、閾値記憶部112は、「滞留電文数閾値」が「20」、「滞留電文長閾値」が「6000」、「電文滞留時間閾値」が「0.05」であることを示す情報を記憶する。なお、図5は、閾値記憶部が格納する情報の一例を示す図である。また、上述した各閾値は、バッファ部140に含まれる複数のバッファ部間で共通である。
受信部120は、パスが確立された送信元の相手装置から電文を受信し、受信した電文を格納制御部130へ転送する。格納制御部130は、受信部120によって受信された電文をバッファ部140へ格納する制御部である。例えば、格納制御部130は、受信部120から電文を受信した場合、電文に付与された送信先の相手装置に関する情報を抽出し、送信先の相手装置とパスが確立される送信部のバッファ部へ電文を格納する。
また、格納制御部130は、バッファ部140へ電文を格納した場合、滞留状況管理レコードに格納された「滞留電文数」と「滞留電文長」の値を更新する。例えば、格納制御部130は、受信した電文の電文長を抽出し、抽出した「電文長」の値を滞留状況管理レコードに格納された「滞留電文長」の値に加算する。具体例として、格納制御部130は、電文長が「140」である電文をバッファ部A141に格納した場合を説明する。この場合、格納制御部130は、既にバッファ部A141に存在する電文数が「4」、電文長が「500」であった場合、滞留状況管理レコードに電文数「5」、電文長「640」を格納する。
また、格納制御部130は、電文をバッファ部A141に格納した時刻を示す「電文格納時刻」を滞留状況管理レコードに格納する。例えば、格納制御部130は、電文を受信部120から受信した場合、時間計測部163へ現在時刻の通知を要求することで現在時刻を取得する。そして、格納制御部130は、電文をバッファ部A141へ格納した時間として時間計測部163から取得した時刻を滞留状況管理レコードに格納する。
図6に示す具体例を用いて、電文と電文格納時刻との関係を説明する。図6に示すように、格納制御部130は、バッファ部A141に電文A、電文B、電文C、電文Dを順に格納する。この場合、格納制御部130は、滞留状況管理レコードの「電文格納時刻管理領域」に電文格納時刻を格納する。具体的には、格納制御部130は、滞留状況管理レコードの「電文格納時刻0」に、電文Aが格納された時刻を格納する。同様に、格納制御部130は、電文Bが格納された時刻を「電文格納時刻1」に、電文Cが格納された時刻を「電文格納時刻2」に、電文Dが格納された時刻を「電文格納時刻3」に格納する。
また、格納制御部130は、電文を格納した場合には、バッファ部140に存在する電文のうち、末尾の電文が格納された時刻を示す「電文格納時刻の末尾ポインタ」を更新する。例えば、格納制御部130は、現在の電文格納時刻の末尾のポインタが示す電文格納時刻を次の値に更新する。具体的には、図7に示す電文Eが格納された場合、格納制御部130は、「電文格納時刻の末尾ポインタ」を「電文格納時刻3」から「電文格納時刻4」へ更新した情報を滞留状況管理レコードに格納する。
続いて、格納制御部130は、「電文格納時刻の末尾ポインタ」を更新した後、電文格納時刻の末尾ポインタが電文格納時刻管理領域の最大値であるか否かを判定する。具体的には、格納制御部130は、現在の電文格納時刻の末尾ポインタが「電文格納時刻4」であった場合、「4」に「1」を加えた値「5」を算出する。そして、格納制御部130は、算出した電文格納時刻の末尾ポインタの値「5」が最大値を超えたか否かを判定する。ここで、最大値を「6」と仮定した場合、格納制御部130は、算出した値「5」を現在の電文格納時刻の末尾ポインタとして更新する。また、ここで、最大値を「4」と仮定した場合、格納制御部130は、算出した値「5」ではなく、「0」を現在の電文格納時刻の末尾ポインタとして更新する。すなわち、格納制御部130は、電文格納時刻管理領域の最大値まで使用した場合には、「電文格納時刻の末尾ポインタ」を「電文格納時刻0」に更新する。
バッファ部140は、バッファ部A141と、バッファ部B142とバッファ部C143とを有し、送信部110によって取り出されるまでの間、格納制御部130によって振り分けられた電文を一時的に格納する。このバッファ部140は、電文格納時刻が古い電文から先に取り出されるFIFO(First-In First-Out)で制御される。
バッファ部A141は、送信部A151によって取り出される電文を一時的に格納する。また、バッファ部B142は、送信部B152によって取り出される電文を一時的に格納する。バッファ部C143は、送信部C153によって取り出される電文を一時的に格納する。
送信部150は、バッファ部140に電文が存在する場合には、バッファ部140各々から電文を読み出し、パスが確立された相手装置へ送信電文数制御部162によって設定された送信優先度にしたがって読み出した電文を送信する。このような送信部150は、送信部A151と、送信部B152と、送信部C153とを有する。
送信部A151は、例えば、送信優先度を増加させる通知を受付けた場合には、送信部B152及び送信部C153が使用していないタイムスライスを優先的に使用することで、単位時間当たりの電文送信量を増加させる。
具体的には、送信部A151は、図8に示すように、送信部A151〜C153の優先度が「低」に設定されていた場合には、送信部A151は、単位時間当たりに2つの電文を送信する。ここで、送信電文数制御部162によって優先度が「高」に設定された場合には、送信部A151は、送信部B152及び送信部C153が使用していないタイムスライスを優先的に使用することで、単位時間当たりに4つの電文を送信する。なお、図8は、送信優先度の増加によって送信部Aが単位時間当たりに送信する電文数の変化の一例を示す図である。
また、送信部A151は、電文を送信した場合には、滞留状況管理レコードAを更新する。例えば、送信部A151は、読み出した電文の電文長を抽出し、抽出した「電文長」の値を滞留状況管理レコードAに格納された「滞留電文長」の値から減算する。具体例として、電文長が「200」である電文をバッファ部A141から読み出した場合を説明する。送信部A151は、既にバッファ部A141に存在する電文数が「5」、電文長が「640」であった場合、滞留状況管理レコードAに電文数「4」、電文長「440」を格納する。
また、送信部A151は、電文を送信した場合には、バッファ部A141に存在する電文のうち、先頭の電文が格納された時刻を示す「電文格納時刻の先頭ポインタ」を更新する。例えば、送信部A151は、現在の電文格納時刻の先頭のポインタが示す電文格納時刻を次の値に更新する。具体的には、送信部A151は、図9に示すように、電文Aを送信した場合、「電文格納時刻の先頭ポインタ」を「電文格納時刻0」から「電文格納時刻1」へ更新し、更新した情報を滞留状況管理レコードに格納する。
続いて、送信部A151は、「電文格納時刻の先頭ポインタ」を更新した後、電文格納時刻の先頭ポインタが電文格納時刻の最大値、すなわち「n−1」であるか否かを判定する。具体的には、送信部A151は、現在の電文格納時刻の先頭ポインタが「4」であった場合、「4」に「1」を加えた値「5」を算出する。そして、送信部A151は、算出した電文格納時刻の末尾ポインタの値「5」が最大値を超えたか否かを判定する。ここで、最大値を「6」と仮定した場合、送信部A151は、算出した値「5」を現在の電文格納時刻の先頭ポインタとして更新する。また、ここで、最大値を「4」と仮定した場合、送信部A151は、算出した値「5」ではなく、「0」を現在の電文格納時刻の先頭ポインタとして更新する。すなわち、送信部A151は、電文格納時刻を「n−1」まで使用した場合には、「電文格納時刻の先頭ポインタ」を「電文格納時刻0」に更新する。なお、送信部B152及び送信部C153は、送信部A151と同様の機能を有するので、送信部B152及び送信部C153について詳細な説明を省略する。
制御部160は、制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有する。制御部160は、監視部161と送信電文数制御部162と時間計測部163とを有する。例えば、制御部160は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、又は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
監視部161は、バッファ部140に存在する電文の滞留時間を監視し、滞留状況管理レコードA〜Cを更新する制御部である。監視部161は、バッファ部140を監視した時刻を取得し、取得した時刻から電文格納時刻の先頭ポインタが示す時刻を差し引いた時間を滞留時間として算出する。例えば、監視部161は、格納制御部130がバッファ部A141に電文を格納した場合、時間計測部163に現在時刻の取得を要求し、時間計測部163から現在時刻の通知を受付ける。そして、監視部161は、取得した現在の時刻が「3:12:55」、電文格納時刻の先頭ポインタが示す時刻が「3:12:43」であった場合、電文滞留時間を「12(秒)」として算出する。続いて、監視部161は、滞留状況管理レコードAの「電文滞留時間」に算出した電文滞留時間を格納する。
また、監視部161は、電文滞留時間と滞留電文数と滞留電文長とに基づいて、バッファ部の滞留状況を判定する。例えば、監視部161は、滞留状況管理レコードAから電文数、電文長、滞留時間を読み出し、読み出した各値が閾値記憶部112から読み出した電文数、電文長、滞留時間の閾値を超えたか否かを判定する。
具体例として、監視部161は、図5に示す滞留電文数閾値、滞留電文長閾値、電文滞留時間閾値を用いて電文の滞留を判定する場合を説明する。また、図10に示す「バッファ部識別子」、「滞留電文数」、「滞留電文長」、「電文滞留時間」、「送信優先度」は、バッファ部識別子に対応する滞留状況管理レコードから抜粋した値であると仮定する。なお、ここで、示す各値は、滞留状況管理レコードと同様であるため、説明は省略する。
図10は、バッファ部識別子「A」に対応するバッファ部A141において、滞留電文数が「5」、滞留電文長が「640」、電文滞留時間が「500」であり、送信優先度が「低」であることを示す。この場合、監視部161は、滞留電文数「5」と図5に示す滞留電文数閾値「20」とを比較し、滞留電文数が閾値を超えていないと判定する。また、監視部161は、滞留電文長「640」と図5に示す滞留電文長閾値「6000」とを比較し、滞留電文長が閾値を超えていないと判定する。また、監視部161は、電文滞留時間「500」と図5に示す電文滞留時間閾値「0.05」とを比較し、電文滞留時間が閾値を超えていると判定する。
同様に、監視部161は、電文滞留時間を算出し、算出した電文滞留時間を滞留状況管理レコードBに格納する。また、監視部161は、滞留状況管理レコードBから電文数、電文長、滞留時間を読み出し、読み出した各値が閾値記憶部112から読み出した電文数、電文長、滞留時間それぞれの閾値を超えたか否かを判定する。
図10は、バッファ部識別子「B」に対応するバッファ部B142において、滞留電文数が「30」、滞留電文長が「7680」、電文滞留時間が「2000」であり、送信優先度が「低」であることを示す。この場合、監視部161は、滞留電文数「30」と図5に示す滞留電文数閾値「20」とを比較し、滞留電文数が閾値を超えていると判定する。また、監視部161は、滞留電文長「7680」と図5に示す滞留電文長閾値「6000」とを比較し、滞留電文長が閾値を超えていると判定する。また、監視部161は、電文滞留時間「2000」と図5に示す電文滞留時間閾値「0.05」とを比較し、電文滞留時間が閾値を超えていると判定する。
同様に、監視部161は、電文滞留時間を算出し、算出した電文滞留時間を滞留状況管理レコードCに格納する。また、監視部161は、滞留状況管理レコードCから電文数、電文長、滞留時間を読み出し、読み出した各値が閾値記憶部112から読み出した電文数、電文長、滞留時間それぞれの閾値を超えたか否かを判定する。
図10は、バッファ部識別子「C」に対応するバッファ部C143における、滞留電文数が「10」、滞留電文長が「1920」、電文滞留時間が「1000」であり、送信優先度が「高」であることを示す。この場合、監視部161は、滞留電文数「10」と図5に示す滞留電文数閾値「20」とを比較し、滞留電文数が閾値を超えていないと判定する。また、監視部161は、滞留電文長「1920」と図5に示す滞留電文長閾値「6000」とを比較し、滞留電文長が閾値を超えていないと判定する。また、監視部161は、電文滞留時間「1000」と図5に示す電文滞留時間閾値「0.05」とを比較し、電文滞留時間が閾値を超えていると判定する。
続いて、監視部161は、監視したバッファ部の電文滞留状況に基づいて、送信優先度を増加させる送信部を判定する。ここでは、監視部161は、例えば、バッファ部のうち、最も電文が滞留しているバッファ部と接続された送信部の送信優先度を増加させるものとして説明する。
監視部161は、バッファ部140における電文滞留状況を判定した結果を比較する。例えば、監視部161は、バッファ部A141において閾値が1つ超えており、バッファ部B142において閾値が3つ超えており、バッファ部C143において閾値が1つ超えているので、バッファ部B142を最も電文が滞留しているバッファ部と判定する。そして、監視部161は、送信電文数制御部162に対して、最も電文が滞留しているバッファ部B142の送信優先度を増加させるように通知する。また、監視部161は、送信電文数制御部162に対して、バッファ部A141の送信優先度を減少させるように通知する。また、監視部161は、送信電文数制御部162に対して、バッファ部C143の送信優先度を減少させるように通知する。なお、図10は、監視部による電文滞留の判定の一例を示す図である。
送信電文数制御部162は、監視部161によって監視されたバッファ部140の電文滞留状況に基づいて、送信部150の送信優先度の設定を変更する制御部である。言い換えると、送信電文数制御部162は、送信部150によって送信される単位時間当たりの電文量を変更する。
例えば、送信電文数制御部162は、送信優先度を増加させると判定した送信部が有するプログラムにアクセスし、アクセスしたプログラムに記述された単位時間当たりの送信電文量を増加させる。また、送信電文数制御部162は、送信優先度を減少させると判定した送信部が有するプログラムにアクセスし、アクセスしたプログラムに記述された単位時間当たりの送信電文量を減少させる。
例えば、送信電文数制御部162は、監視部161から送信優先度の変更要求通知を受付けた場合には、要求種別を判定して、判定した要求に基づいて送信部150の優先度を変更する。具体的には、送信電文数制御部162は、監視部161から受付けた送信優先度の変更要求が送信部150各々に対して増加を指示するものであるか、減少を指示するものであるかを判定する。
送信電文数制御部162は、監視部161から送信優先度を増加させる通知を受付けた場合、最大優先度に設定されているか否かを判定する。すでに最大優先度である「高」に設定されていた場合には、送信電文数制御部162は、優先度を変更しない。最大優先度である「高」に設定されていない場合には、送信電文数制御部162は、滞留状況管理レコードの「送信優先度」を最大優先度である「高」へ更新する。
また、送信電文数制御部162は、送信優先度を減少させる通知を受付けた場合、デフォルト優先度に設定されているか否かを判定する。すでにデフォルト優先度である「低」に設定されていた場合には、送信電文数制御部162は、優先度を変更しない。デフォルト優先度である「低」に設定されていない場合には、送信電文数制御部162は、滞留状況管理レコードの「送信優先度」をデフォルト優先度である「低」へ更新する。
例えば、図10を例にして説明すると、送信電文数制御部162は、バッファ部A141について送信優先度を減少させる通知を受付ける。この場合、送信電文数制御部162は、滞留状況管理レコードAの送信優先度の値を検索し、この値が「低」であることから、すでにデフォルト優先度に設定されていると判定する。この場合、送信電文数制御部162は、滞留状況管理レコードAの送信優先度を変更しない。
また、図10を例にして説明すると、送信電文数制御部162は、バッファ部B142について送信優先度を増加させる通知を受付ける。この場合、送信電文数制御部162は、滞留状況管理レコードBの送信優先度の値を検索し、この値が「低」であることから、最大優先度には設定されていないと判定し、滞留状況管理レコードBの送信優先度の値を最大優先度である「高」に更新する。
また、図10を例にして説明すると、送信電文数制御部162は、バッファ部C143について送信優先度を減少させる通知を受付ける。この場合、送信電文数制御部162は、滞留状況管理レコードCの送信優先度の値を検索し、この値が「高」であることから、最大優先度に設定されていると判定し、滞留状況管理レコードCの送信優先度の値をデフォルト優先度である「低」に更新する。
時間計測部163は、格納制御部130からの要求に対して、現在の時刻を通知する制御部である。例えば、時間計測部163は、格納制御部130が電文を格納する場合に、格納制御部130からの要求に応答して現在の時刻を通知する。
時間計測部163は、所定の時間が経過した場合に、監視部161へ所定の時間が経過したことを通知する。具体的には、時間計測部163は、監視部161へ通知し、バッファ部140を監視させる。
また、時間計測部163は、監視部161が電文滞留時間を計測する場合に、監視部161からの要求に応答して現在の時刻を通知する。
[格納制御部による処理の処理手順]
次に、図11を用いて格納制御部130による処理の処理手順を説明する。図11は、格納制御部による処理の処理手順を示すフローチャートである。格納制御部130は、受信部120から電文を受信したと判定した場合(ステップS101、Yes)、バッファ部140に電文を格納し(ステップS102)、滞留状況管理レコードの「電文数」と「電文長」を更新する(ステップS103)。
続いて、格納制御部130は、電文格納時刻の末尾ポインタを更新し(ステップS104)、電文格納時刻の末尾ポインタが最大値であるか否かを判定する(ステップS105)。格納制御部130は、電文格納時刻の末尾ポインタが最大値であると判定した場合には(ステップS105、Yes)、電文格納時刻の末尾ポインタを0に戻し(ステップS106)、処理を終了する。一方、格納制御部130は、電文格納時刻の末尾ポインタが最大値ではないと判定した場合には(ステップS105、No)、処理を終了する。
[送信部による処理の処理手順]
次に、図12を用いて送信部150による処理の処理手順を説明する。図12は、送信部による処理の処理手順を示すフローチャートである。送信部150は、バッファ部140に電文が存在すると判定した場合(ステップS201、Yes)、電文を送信する(ステップS202)。送信部150は、電文格納時刻の先頭ポインタを更新し(ステップS203)、電文格納時刻の先頭ポインタが最大値であるか否かを判定する(ステップS204)。
送信部150は、電文格納時刻の先頭ポインタが最大値であると判定した場合には(ステップS204、Yes)、電文格納時刻の先頭ポインタを0に戻す(ステップS205)。続いて、送信部150は、滞留状況管理レコードの「電文数」と「電文長」を更新し(ステップS206)、処理を終了する。一方、送信部150は、電文格納時刻の先頭ポインタが最大値ではないと判定した場合には(ステップS204、No)、滞留状況管理レコードの「電文数」と「電文長」を更新し(ステップS206)、処理を終了する。
[監視部による処理の処理手順]
次に、図13を用いて実施例2にかかる監視部161による処理の処理手順を説明する。図13は、実施例2にかかる監視部による処理の処理手順を示すフローチャートである。監視部161は、所定の時間が経過したと判定した場合(ステップS301、Yes)、先頭のバッファ部140を監視する(ステップS302)。監視部161は、現在の時刻を取得し(ステップS303)、滞留状況管理レコードの「電文滞留時間」を更新する(ステップS304)。
続いて、監視部161は、閾値記憶部112から滞留電文数、滞留電文長、電文滞留時間についての閾値を読み出し、滞留状況管理レコードに格納された滞留電文数、滞留電文長、電文滞留時間の各値が閾値を超えたか否かを判定する(ステップS305)。
続いて、監視部161は、監視しているバッファ部140が最終のバッファ部であるか否かを判定する(ステップS306)。監視部161は、監視しているバッファ部140が最終バッファ部であると判定した場合には(ステップS306、Yes)、送信電文数制御部162へ送信優先度の変更を通知し(ステップS307)、処理を終了する。一方、監視部161は、監視しているバッファ部140が最終バッファ部ではないと判定した場合には(ステップS306、No)、次のバッファ部を監視し(ステップS308)、最終バッファ部であると判定するまで、ステップS304以降の処理を繰り返す。
[送信電文数制御部による処理の処理手順]
次に、図14を用いて実施例2にかかる送信電文数制御部162による処理の処理手順を説明する。図14は、実施例2にかかる送信電文数制御部による処理の処理手順を示すフローチャートである。送信電文数制御部162は、監視部161から送信優先度を変更させる通知を受付けた場合には(ステップS401、Yes)、通知が優先度の増加を指示するものであるか否かを判定する(ステップS402)。
送信電文数制御部162は、通知が優先度の増加を指示するものであると判定した場合には(ステップS402、Yes)、送信優先度が最大優先度であるか否かを判定する(ステップS403)。送信電文数制御部162は、送信優先度が最大優先度であると判定した場合には(ステップS403、Yes)、そのまま処理を終了する。一方、送信電文数制御部162は、送信優先度が最大優先度ではないと判定した場合には(ステップS403、No)、滞留状況管理レコードを更新し(ステップS404)、送信部150の送信優先度を変更する(ステップS405)。
一方、送信電文数制御部162は、通知が優先度の増加を指示するものではないと判定した場合には(ステップS402、No)、送信優先度がデフォルト優先度であるか否かを判定する(ステップS406)。送信電文数制御部162は、送信優先度がデフォルト優先度であると判定した場合には(ステップS406、Yes)、そのまま処理を終了する。一方、送信電文数制御部162は、送信優先度がデフォルト優先度ではないと判定した場合には(ステップS406、No)、滞留状況管理レコードを更新し(ステップS407)、送信部150の送信優先度を変更する(ステップS408)。
[実施例2の効果]
上述してきたように、本実施例2では、格納制御部130が電文を格納し、「電文数」と「電文長」を更新する。また、監視部161は、「電文滞留時間」を更新する。そして、監視部161は、バッファ部各々における「電文数」、「電文長」、「電文滞留時間」が所定の閾値を超えたか否かを判定し、送信電文数制御部162に閾値を最も超えたバッファ部140の送信優先度を変更させる。したがって、本実施例にかかる通信装置100は、「滞留電文数」、「滞留電文長」、「電文滞留時間」に応じて送信部150の送信優先度を動的に増加させることで、電文送信間隔を短縮することができる。言い換えると、本実施例にかかる通信装置100は、送信部150が単位時間当たり送信する電文数を増加させる。この結果、通信装置100は、バッファ部140で滞留した電文を早期に送信完了させることができる。
また、障害復旧作業中に送信部150の送信優先度を動的に増加させることにより、送信部150は、障害が復旧した時点で、送信優先度を高く設定して再開できる。また、送信部150の優先度を動的に変更させることで、バッファ部140における電文の滞留、また、障害回復中に送信優先度を動的に増加させることにより、障害が回復した時点で高い送信優先度で処理を再開できる。
また、本実施例にかかる通信装置100は、バッファ部140の滞留電文数、滞留電文長、電文滞留時間に応じて動的に送信部150の送信優先度を変更するので、送信優先度の事前設計が不要である。
また、本実施例にかかる通信装置100は、電文の滞留が解消したと判定した場合には、送信部150の送信優先度を動的に減少させるので、CPU資源の利用効率を向上させることができる。
実施例2では、監視部161が閾値を用いて電文の滞留を判定する例について説明したが、これに限定されるものではなく、例えば、閾値を用いずに電文の滞留を判定してもよい。そこで、実施例3では、通信装置200が閾値を用いずに電文の滞留を判定する場合について説明する。
[実施例3にかかる通信装置の構成]
次に、図15を用いて、実施例3にかかる通信装置200の構成を説明する。図15は、実施例3にかかる通信装置の構成を示すブロック図である。実施例3にかかる通信装置200は、記憶部210と、受信部120と、格納制御部130と、バッファ部140と、送信部150と、制御部260とを有する。なお、ここでは、図2に示した各部と同様の役割を果たす機能部については、同一符号を付すことにして、その詳細な説明を省略する。
記憶部210は、例えば、半導体メモリ素子、又はハードディスクなどの記憶装置であり、滞留状況記憶部111と優先度範囲記憶部212とを有する。優先度範囲記憶部212は、送信優先度の算出に必要な各種の値を記憶する。例えば、優先度範囲記憶部212は、図16に示すように、「想定トランザクション量」と「送信部の数」と「最大1電文長」と「優先度範囲」と「最大優先度」と「デフォルト優先度」と「係数α」と「係数β」と「係数γ」とを記憶する。
図16に示す優先度範囲記憶部212の「想定トランザクション量」は、想定される1秒当たりのトランザクション量を示す情報である。また、「送信部の数」は、通信装置200が有する送信部150の数を示す情報である。また、「最大1電文長」は、1電文当たりに許容できる電文長を示す情報である。また、「優先度範囲」は、「最大優先度−デフォルト優先度」によって決定される値を示す情報である。また、「最大優先度」は、送信優先度の最大値を示す情報である。また、「デフォルト優先度」は、通常状態における送信優先度の設定値を示す情報である。
また、「係数α」は、「優先度範囲/(想定トランザクション量/通信部の数)」によって決定される値である。また、「係数β」は、「優先度範囲/(最大1電文長×想定トランザクション量/通信部の数)」によって決定される値である。また、「係数γ」は、「優先度範囲/(通信部の数/想定トランザクション量)」によって決定される値である。
具体的には、図16に示す優先度範囲記憶部212は、「想定トランザクション量」が「60」、「送信部の数」が「3」、「最大1電文長」が「300」であることを示す情報を記憶する。また、優先度範囲記憶部212は、「優先度範囲」が「20」、「最大優先度」が「20」、「デフォルト優先度」が「0」であることを示す情報を記憶する。また、優先度範囲記憶部212は、「係数α」が「1」、「係数β」が「1/300」、「係数γ」が「400」であることを示す情報を記憶する。なお、図16は、優先度範囲記憶部が格納する情報の一例を示す図である。また、上述した各種設定値は、通信装置200が有する複数のバッファ部140間で共通である。
制御部260は、制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有する。制御部260は、監視部261と送信電文数制御部262と時間計測部163とを有する。例えば、制御部260は、ASICやFPGAなどの集積回路、又は、CPUやMPUなどの電子回路である。
監視部261は、バッファ部140に存在する電文の滞留時間を監視する制御部である。監視部261は、バッファ部140を監視した時刻を取得し、取得した時刻から電文格納時刻の先頭ポインタが示す時刻を差し引いた時間を滞留時間として算出する。例えば、監視部261は、時間計測部163に現在時刻の取得を要求し、時間計測部163から現在時刻の通知を受付ける。監視部261は、取得した現在の時刻が「3:12:55」、電文格納時刻の先頭ポインタが示す時刻が「3:12:43」であった場合、電文滞留時間を「12(秒)」として算出する。続いて、監視部261は、算出した電文滞留時間を滞留状況管理レコードに格納する。
同様に、監視部261は、バッファ部B142における電文滞留時間を算出し、算出した電文滞留時間を滞留状況管理レコードBに格納する。また、同様に、監視部261は、バッファ部C143における電文滞留時間を算出し、算出した電文滞留時間を滞留状況管理レコードCに格納する。
送信電文数制御部262は、監視部261によって監視されたバッファ部140の電文滞留状況に基づいて、送信部150の送信優先度を算出する制御部である。ここで、送信電文数制御部262は、計算式「送信優先度=デフォルト優先度+(α×滞留電文数+β
×滞留電文長+γ×電文滞留時間)/3」を用いて送信優先度を算出する。
具体例として、監視部261は、図16に示す「デフォルト優先度」、「α」、「β」、「γ」と、図10に示す「滞留電文数」、「滞留電文長」、「電文滞留時間」とを用いて送信優先度を算出する場合を説明する。また、図10に示す「バッファ部識別子」、「滞留電文数」、「滞留電文長」、「電文滞留時間」は、バッファ部識別子に対応する滞留状況管理レコードから抜粋した値であると仮定する。なお、ここで、示す各値は、滞留状況管理レコードと同様であるため、説明は省略する。
送信電文数制御部262は、バッファ部A141に対応する滞留状況管理レコードAから「滞留電文数」が「5」、「滞留電文長」が「640」、「電文滞留時間」が「500」であることを読み出し、読み出した値に基づいて、送信優先度を算出する。具体的には、送信電文数制御部262は、バッファ部A141の送信優先度を「6669」と算出する。
送信電文数制御部262は、バッファ部B142に対応する滞留状況管理レコードBから「滞留電文数」が「30」、「滞留電文長」が「7680」、「電文滞留時間」が「2000」であることを読み出し、読み出した値に基づいて、送信優先度を算出する。具体的には、送信電文数制御部262は、バッファ部B142の送信優先度を「266685」と算出する。
送信電文数制御部262は、バッファ部C143に対応する滞留状況管理レコードCから「滞留電文数」が「10」、「滞留電文長」が「1920」、「電文滞留時間」が「1000」であることを読み出し、読み出した値に基づいて、送信優先度を算出する。具体的には、送信電文数制御部262は、バッファ部C143の送信優先度を「133338」と算出する。
続いて、送信電文数制御部262は、算出した送信優先度に基づいて、滞留状況管理レコードの送信優先度を更新する。また、ここでは、送信電文数制御部262は、算出した送信優先度の値を比較し、値の大きい順にタイムスライスを割り当てるものとして説明する。
送信電文数制御部262は、算出した送信優先度の値を比較し、値が最大値である場合に、滞留状況管理レコードの送信優先度を「高」に設定する。具体的には、送信電文数制御部262は、算出した送信優先度が「266685」であるバッファ部B142に対応する滞留状況管理レコードBの送信優先度を「高」に更新する。また、送信電文数制御部262は、算出した送信優先度の値を比較し、値が最大値に次いで大きい値である場合に、滞留状況管理レコードの送信優先度を「中」に設定する。具体的には、送信電文数制御部262は、算出した送信優先度が「133338」であるバッファ部C143に対応する滞留状況管理レコードCを「中」に更新する。また、送信電文数制御部262は、算出した送信優先度の値を比較し、値が最小値である場合に、滞留状況管理レコードの送信優先度を「低」に設定する。具体的には、送信電文数制御部262は、算出した送信優先度が「6669」であるバッファ部A141に対応する滞留状況管理レコードAを「低」に更新する。
また、送信電文数制御部262は、送信部150が有するプログラムにアクセスし、アクセスしたプログラムに記述された単位時間当たりの送信電文量を変更する。例えば、送信電文数制御部262は、送信部150に割り当てることができるタイムスライスが「10」であった場合には、送信優先度が「高」である送信部B152にタイムスライスを「6」割り当てる。また、送信電文数制御部262は、送信優先度が「中」である送信部C153にタイムスライスを「3」割り当てる。また、送信電文数制御部262は、送信優先度が「低」である送信部A151にタイムスライスを「1」割り当てる。
[実施例3にかかる監視部による処理の処理手順]
次に、図17を用いて実施例3にかかる監視部261による処理の処理手順を説明する。図17は、実施例3にかかる監視部261による処理の処理手順を示すフローチャートである。監視部261は、所定の時間が経過したと判定した場合(ステップS501、Yes)、先頭のバッファ部140を監視する(ステップS502)。監視部261は、現在の時刻を取得し(ステップS503)、滞留状況管理レコードの「電文滞留時間」を更新する(ステップS504)。
監視部261は、監視しているバッファ部140が最終バッファ部であるか否かを判定する(ステップS505)。監視部261は、監視しているバッファ部140が最終バッファ部であると判定した場合には(ステップS505、Yes)、処理を終了する。一方、監視部261は、監視しているバッファ部140が最終バッファ部ではないと判定した場合には(ステップS505、No)、次のバッファ部を監視し(ステップS506)、最終バッファ部であると判定するまで、ステップS504以降の処理を繰り返す。
[送信電文数制御部による処理の処理手順]
次に、図18を用いて実施例3にかかる送信電文数制御部262による処理の処理手順を説明する。図18は、実施例3にかかる送信電文数制御部262による処理の処理手順を示すフローチャートである。送信電文数制御部262は、1秒休止したと判定した場合には(ステップS601、Yes)、送信優先度を算出する(ステップS602)。続いて、送信電文数制御部262は、滞留状況管理レコードを更新し(ステップS603)、送信部150の送信優先度を変更する(ステップS604)。
[実施例3の効果]
上述してきたように、本実施例3では、送信電文数制御部262は、送信優先度を算出し、算出した送信優先度に基づいて、送信部からの電文送信数を制御するので、厳密に送信優先度を変更することができる。この結果、通信装置200は、滞留した電文を早期に送信完了させることができる。
ところで、本願の開示する電文送信制御プログラム、通信装置及び電文送信制御方法は、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例4では、本願の開示する電文送信制御プログラム、通信装置及び電文送信制御方法の他の実施例について説明する。
(システム構成等)
実施例において説明した各処理のうち自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、制御手順、具体的名称については、特記する場合を除いて任意に変更することができる。
また、図示した記憶部に格納された情報は一例に過ぎず、必ずしも図示のごとく情報が格納される必要はない。例えば、実施例2において、閾値記憶部112が格納する「想定トランザクション量」、「送信部の数」、「最大1電文長」は、任意に変更可能である。また、通信装置の負荷状況に応じて閾値を変化させてもよい。
実施例3において、優先度範囲記憶部212が格納する「想定トランザクション量」、「送信部の数」、「最大1電文長」、「優先度範囲」、「最大優先度」、「デフォルト優先度」は、任意に変更可能である。また、係数「α」、「β」、「γ」は固定値として説明したが、利用者が任意に選択する値を使用してもよい。
監視部161及び監視部261は、バッファ部140を所定の順序で監視してもよく、また、複数もしくは全てのバッファ部を同時に監視してもよい。また、全てのバッファ部において、電文が滞留している場合には、滞留状況が最小のバッファ部に電文を格納するようにしてもよい。
実施例2において、超えた閾値の数に基づいて、送信優先度を増加させる送信部を一つ選択するように説明した。また、実施例3において、算出した送信優先度の中から最も値の高い送信部を一つ選択して、送信優先度を増加させるように説明した。しかし、本願の開示する通信装置は、これに限定されず、任意の組み合わせで送信優先度を増加させる送信部を選択してもよい。
実施例2において、通信装置は、送信優先度を「低」と「高」の2段階で変更するものとして説明した。しかし、送信優先度の設定方法はこれに限定されるものではない。例えば、実施例2にかかる通信装置は、「低」、「中」、「高」の3段階で送信優先度を設定してもよく、また、より多段階で送信優先度を設定してもよい。
実施例3において、算出した送信優先度の値に基づいて、「低」、「中」、「高」の3段階で送信優先度を変更するものとして説明した。しかし、より多段階で送信優先度を設定してもよい。また、送信優先度に基づいて送信部が送信する電文の数の割り当てについては任意に変更可能である。
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、通信装置100は、監視部161と送信電文数制御部162とは統合されてもよい。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(プログラム)
ところで、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
図19は、電文送信制御プログラムを実行するコンピュータシステムを示す図である。図19に示すように、コンピュータシステム300は、RAM310と、ROM330と、CPU320と、入力装置340と、出力装置350と、媒体読取装置360と、ネットワークインターフェース370とを有する。ここで、ROM330には、上記実施例と同様の機能を発揮するプログラムを予め記憶されている。つまり、図19に示すように、ROM330には、滞留状況判定プログラム331と送信電文数制御プログラム332とが予め記憶されている。
そして、CPU320には、滞留状況判定プログラム331と送信電文数制御プログラム332とを読み出してRAM310に展開する。そして、CPU320は、滞留状況判定プログラム331を滞留状況判定プロセス321として実行する。またCPU320は、送信電文数制御プログラム332を送信電文数制御プロセス322として実行する。なお、滞留状況判定プロセス321は、図2に示した監視部161に対応する。同様に、送信電文数制御プロセス322は、送信電文数制御部162に対応する。
ところで、上記したプログラム331及び332は、必ずしもROM330に記憶させておく必要はない。例えば、コンピュータシステム300に挿入されるフレキシブルディスク(FD)、CD−ROM、MOディスク、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に記憶させておくようにしてもよい。また、コンピュータシステム300の内外に備えられるハードディスクドライブ(HDD)などの「固定用の物理媒体」に記憶させておいてもよい。さらに、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)などを介してコンピュータシステム300に接続される「他のコンピュータシステム」に記憶させておいてもよい。そして、コンピュータシステム300がこれらからプログラムを読み出して実行するようにしてもよい。
すなわち、このプログラムは、上記した「可搬用の物理媒体」、「固定用の物理媒体」、「通信媒体」などの記録媒体に、コンピュータ読み取り可能に記憶されるものである。そして、コンピュータシステム300は、このような記録媒体からプログラムを読み出して実行することで上記した実施例と同様の機能を実現する。なお、この他の実施例でいうプログラムは、コンピュータシステム300によって実行されることに限定されるものではない。例えば、他のコンピュータシステムまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
記憶部に記憶された電文を読み出し、読み出した電文を相手装置へ送信する送信手順と、
前記記憶部に記憶される電文の滞留状況を監視する監視手順と、
前記監視手順によって監視された滞留状況に基づいて、前記送信手順が送信する電文数を制御する送信電文数制御手順と
を実行させることを特徴とする電文送信制御プログラム。
(付記2)前記監視手順は、前記記憶部に記憶される電文の総数を示す滞留電文数と、当該電文の総数の長さを示す滞留電文長と、前記記憶部の先頭に格納される電文の格納経過時間を示す電文滞留時間とのそれぞれについて監視し、
前記送信電文数制御手順は、前記監視手順による監視結果に基づいて、前記送信手順が単位時間当たりに送信する電文数を制御することを特徴とする付記1に記載の電文送信制御プログラム。
(付記3)前記監視手順は、前記滞留電文数と滞留電文長と電文滞留時間とのそれぞれが、閾値を超えるか否かを監視することを特徴とする付記2に記載の電文送信制御プログラム。
(付記4)前記送信電文数制御手順は、前記監視手順による監視結果が前記滞留電文数と滞留電文長と電文滞留時間の少なくとも一つが閾値を越える場合には、前記送信手順が単位時間当たりに送信する電文数を増やすことを特徴とする付記3に記載の電文送信制御プログラム。
(付記5)前記送信電文数制御手順は、前記送信手順が単位時間当たりに送信する電文数を増やした後に、前記監視手順による監視結果が前記滞留電文数と滞留電文長と電文滞留時間とが閾値未満となった場合には、前記送信手順が単位時間当たりに送信する電文数を、増やす前の電文数に戻すことを特徴とする付記4に記載の電文送信制御プログラム。
(付記6)前記送信電文数制御手順は、前記監視手順による監視結果である前記滞留電文数と滞留電文長と電文滞留時間とのそれぞれに基づいて、前記送信手順が単位時間当たりに送信する電文数を決定する送信優先度を算出し、算出した送信優先度に基づいて、前記送信手順が単位時間当たりに送信する電文数を変化させることを特徴とする付記2に記載の電文送信制御プログラム。
(付記7)前記送信電文数制御手順は、前記監視手順によって算出された送信優先度が所定値以上である場合には、前記送信手順が単位時間当たりに送信する電文数を増やすことを特徴とする付記6に記載の電文送信制御プログラム。
(付記8)前記送信電文数制御手順は、前記送信手順が単位時間当たりに送信する電文数を増やした後に、前記監視手順によって算出された送信優先度が所定値未満となった場合には、前記送信手順が単位時間当たりに送信する電文数を、増やす前の電文数に戻すことを特徴とする付記7に記載の電文送信制御プログラム。
(付記9)送信対象となる電文を記憶する記憶部と、
前記記憶部に記憶された電文を読み出し、読み出した電文を相手装置へ送信する送信部と、
前記記憶部に記憶される電文の滞留状況を監視する監視部と、
前記監視部によって監視された滞留状況に基づいて、前記送信部が送信する電文数を制御する送信電文数制御部と
を有することを特徴とする通信装置。
(付記10)コンピュータが、
記憶部に記憶された電文を読み出し、読み出した電文を相手装置へ送信する送信ステップと、
前記記憶部に記憶される電文の滞留状況を監視する監視ステップと、
前記監視ステップによって監視された滞留状況に基づいて、前記送信ステップが送信する電文数を制御する送信電文数制御ステップと
を含んだことを特徴とする電文送信制御方法。