(57)【要約】 【課題】  ツリー構造状に通信を行うノード装置等を提供する。【解決手段】  ノード装置６０１の記憶部６０２は、ノード名の列を、自己パス名として記憶し、ノード名と通信識別子との対を、子ノード名と子ＩＤとの対として０個以上記憶し、１個の通信識別子を、親ＩＤとして記憶し、受信部６０３は、他のノード装置から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信し、出力部６０４は、自己パス名が宛先パス名と一致する場合、当該データを出力し、送信部６０５は、記憶された対のいずれかについて、自己パス名に当該対の子ノード名を追加したものが宛先パス名の先頭部もしくは全部と一致する場合、対の子ＩＤに対応付けられた他のノード装置に当該データを送信し、自己パス名が宛先パス名の先頭部とも全部とも一致しない場合、前記記憶された親ＩＤに対応付けられた他のノード装置に当該データを送信する。【選択図】  図６
2005197767.tif 000002
【特許請求の範囲】
【請求項１】
受信部と、出力部と、送信部と、を備えるノード装置であって、
ノード名の列が、自己パス名として割り当てられ、
他のノード装置が、１個の親ノード、および、０個以上の子ノードとして割り当てられ、
前記受信部は、他のノード装置から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信し、
前記出力部は、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力し、
前記送信部は、当該ノード装置に割り当てられた子ノードのいずれかについて、当該自己パス名に当該子ノードの名前（以下「子ノード名」という。）を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該子ノードに当該データを送信し、
前記送信部は、当該自己パス名が当該宛先パス名の先頭部とも全部とも一致しない（以下「上り条件」という。）場合、当該ノード装置に割り当てられた親ノードに当該データを送信する
ことを特徴とするもの。
【請求項２】
記憶部と、受信部と、出力部と、送信部と、を備えるノード装置であって、
前記記憶部は、
（ａ）ノード名の列を、自己パス名として記憶し、
（ｂ）ノード名と通信識別子との対を、子ノード名と子ＩＤとの対として０個以上記憶し、
（ｃ）当該子ＩＤは互いに重複せず、
（ｄ）当該子ノード名は互いに重複せず、
前記受信部は、他のノード装置（以下「直前ノード」という。）から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信し、
前記出力部は、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力し、
前記送信部は、前記記憶された対のいずれかについて、当該自己パス名に当該対の子ノード名を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該対の子ＩＤに対応付けられた他のノード装置に当該データを送信する
ことを特徴とするもの。
【請求項３】
請求項２に記載のノード装置であって、
前記記憶部は、
（ｅ）１個の通信識別子を、親ＩＤとして記憶し、
（ｆ）当該親ＩＤと当該子ＩＤとは互いに重複せず、
前記送信部は、当該自己パス名が当該宛先パス名の先頭部とも全部とも一致しない（以下「上り条件」という。）場合、前記記憶された親ＩＤに対応付けられた他のノード装置に当該データを送信する
ことを特徴とするもの。
【請求項４】
請求項３に記載のノード装置であって、
前記記憶部は、
（ｇ）１個以上の通信識別子を、代替ＩＤとしてさらに記憶し、
（ｈ）当該代替ＩＤと当該親ＩＤと当該子ＩＤとは互いに重複せず、
前記送信部は、当該上り条件が満たされる場合であって、当該親ＩＤに対応付けられたノード装置との通信ができない場合、当該代替ＩＤに対応付けられたノード装置であって通信ができるもののいずれかに、当該データを送信する
ことを特徴とするもの。
【請求項５】
請求項２から４のいずれか１項に記載のノード装置であって、通信識別子（以下「自己ＩＤ」という。）を対応付けられ、
前記記憶部は、ノード名の列と通信識別子との対を、子ノード名と子ＩＤとの対として、さらに記憶することができ、
前記記憶された対において、当該子ノード名がノード名の列である場合、当該子ＩＤに対応付けられたノード装置は、当該自己ＩＤを、代替ＩＤとして記憶する
ことを特徴とするもの。
【請求項６】
請求項３または４に記載のノード装置であって、報告部をさらに備え、
前記受信されたデータには、ノード名の列が発信元パス名としてさらに指定され、
前記報告部は、前記出力部による出力がされず、かつ、前記送信部による送信ができない場合、「当該データに指定された発信元パス名を宛先パス名として指定し、当該データの中継に失敗した旨を報告するデータ」を、当該直前ノードに送信する
ことを特徴とするもの。
【請求項７】
請求項３または４に記載のノード装置であって、アクセス部をさらに備え、
前記受信されたデータには、ノード名の列が発信元パス名としてさらに指定され、リソース名がさらに指定され、
前記アクセス部は、前記出力されたデータに指定されるリソース名に対応付けられたリソースにアクセスし、
前記送信部は、「当該データに指定された発信元パス名を宛先パス名として指定し、当該アクセスの結果を指定するデータ」を、当該直前ノードに送信する
ことを特徴とするもの。
【請求項８】
請求項７に記載のノード装置であって、システムコール部をさらに備え、
前記システムコール部は、
パス名と、リソース名と、を、指定するシステムコールの呼び出しを受け付けて、
「当該システムコールに指定されたパス名を宛先パス名として指定し、当該リソース名を指定し、当該自己パス名を発信元パス名として指定するデータ」を、前記送信部に送信させる
ことを特徴とするもの。
【請求項９】
請求項２に記載のノード装置であって、追加部をさらに備え、通信識別子（以下「自己ＩＤ」という。）を対応付けられ、
前記追加部は、
新たな通信識別子を追加ＩＤとして指定する追加要求を受け付け、
当該自己ＩＤもしくは当該対の子ＩＤからいずれか１つを選択し、
（ｘ）当該選択されたものが当該自己ＩＤである場合、
（１）当該追加ＩＤに対応付けられたノード装置（以下「追加装置」という。）にノード名（以下「追加ノード名」という。）を割り当て、
（２）前記記憶部に、当該追加ノード名と当該追加ＩＤとの対を、子ノード名と子ＩＤの対として、さらに記憶させ、
（３）当該自己パス名に当該追加ノード名を追加したもの（以下「追加パス名」という。）を、自己パス名として、当該追加装置に記憶させ、
（４）当該自己ＩＤを、親ＩＤとして、当該追加装置に記憶させ、
（ｙ）当該選択されたものが当該対の子ＩＤのいずれかである場合、当該子ＩＤに対応付けられたノード装置に当該追加要求を受け付けさせる
ことを特徴とするもの。
【請求項１０】
請求項４に記載のノード装置であって、追加部をさらに備え、通信識別子（以下「自己ＩＤ」という。）を対応付けられ、
前記追加部は、
新たな通信識別子を追加ＩＤとして指定する追加要求を受け付け、
当該自己ＩＤもしくは当該対の子ＩＤからいずれか１つを選択し、
（ｘ）当該選択されたものが当該自己ＩＤである場合、
（１）当該追加ＩＤに対応付けられたノード装置（以下「追加装置」という。）にノード名（以下「追加ノード名」という。）を割り当て、
（２）前記記憶部に、当該追加ノード名と当該追加ＩＤとの対を、子ノード名と子ＩＤの対として、さらに記憶させ、
（３）当該自己パス名に当該追加ノード名を追加したもの（以下「追加パス名」という。）を、自己パス名として、当該追加装置に記憶させ、
（４）当該自己ＩＤを、親ＩＤとして、当該追加装置に記憶させ、
（ｙ）当該選択されたものが当該対の子ＩＤのいずれかである場合、当該子ＩＤに対応付けられたノード装置に当該追加要求を受け付けさせる
ことを特徴とするもの。
【請求項１１】
請求項９または１０に記載のノード装置であって、
前記追加部は、
前記記憶される対の数が所定の閾値よりも小さい場合、当該自己ＩＤを選択する
ことを特徴とするもの。
【請求項１２】
請求項１１に記載のノード装置であって、
前記追加部は、
前記記憶される対の数が所定の閾値以上である場合、当該対の子ＩＤのうち、これに対応付けられたノード装置との通信が可能で、当該ノード装置との通信の頻度が所定の範囲に含まれるものを選択する
ことを特徴とするもの。
【請求項１３】
ツリー構造に対応付けられる通信システムであって、
当該ツリー構造において、ルートは、請求項９に記載のノード装置に対応付けられ、ルート以外のノードは、請求項１０に記載のノード装置に対応付けられ、
当該ツリー構造で親ノードに対応付けられるノード装置（以下「親ノード装置」という。）と、その子ノードに対応付けられるノード装置（以下「子ノード装置」という。）と、において、当該親ノード装置は、当該子ノード装置のノード名とこれに対応付けられる通信識別子との対を、子ノード名と子ＩＤの対として記憶し、当該子ノード装置は、当該親ノード装置に対応付けられる通信識別子を、親ＩＤとして記憶する
ことを特徴とするもの。
【請求項１４】
請求項１３に記載の通信システムであって、
当該ツリー構造において、「あるノードの子孫ノード」とは、当該ノードの子ノード、および、当該子ノードの子孫ノードをいい、
「あるノードの先祖ノード」とは、当該ノードの親ノード、および、当該親ノードの先祖ノードをいい、
代替ＩＤを記憶するノード装置は、その子孫ノードでないノード装置の通信識別子を、当該代替ＩＤとして記憶する
ことを特徴とするもの。
【請求項１５】
受信工程と、出力工程と、送信工程と、を備え、ノード名の列を自己パス名として用い、他のノード装置を、１個の親ノード、および、０個以上の子ノードとしてこれらと通信するノード方法であって、
前記受信工程では、他のノード装置から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信し、
前記出力工程では、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力し、
前記送信工程では、当該子ノードのいずれかについて、当該自己パス名に当該子ノードの名前（以下「子ノード名」という。）を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該子ノードに当該データを送信し、
前記送信工程では、当該自己パス名が当該宛先パス名の先頭部とも全部とも一致しない（以下「上り条件」という。）場合、当該ノード装置に割り当てられた親ノードに当該データを送信する
ことを特徴とする方法。
【請求項１６】
受信工程、出力工程、送信工程を備えるノード方法であって、記憶部を用い、
前記記憶部は、
（ａ）ノード名の列を、自己パス名として記憶し、
（ｂ）ノード名と通信識別子との対を、子ノード名と子ＩＤとの対として０個以上記憶し、
（ｃ）当該子ＩＤは互いに重複せず、
（ｄ）当該子ノード名は互いに重複せず、
前記受信工程では、他のノード装置（以下「直前ノード」という。）から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信し、
前記出力工程では、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力し、
前記送信工程では、前記記憶された対のいずれかについて、当該自己パス名に当該対の子ノード名を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該対の子ＩＤに対応付けられた他のノード装置に当該データを送信する
ことを特徴とする方法。
【請求項１７】
コンピュータを、受信部、出力部、送信部として機能させるプログラムであって、
当該コンピュータには、
ノード名の列が、自己パス名として割り当てられ、
他のノード装置が、１個の親ノード、および、０個以上の子ノードとして割り当てられ、
当該プログラムは、当該コンピュータにおいて、
前記受信部は、他のノード装置から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信し、
前記出力部は、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力し、
前記送信部は、当該ノード装置に割り当てられた子ノードのいずれかについて、当該自己パス名に当該子ノードの名前（以下「子ノード名」という。）を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該子ノードに当該データを送信し、
前記送信部は、当該自己パス名が当該宛先パス名の先頭部とも全部とも一致しない（以下「上り条件」という。）場合、当該ノード装置に割り当てられた親ノードに当該データを送信する
ように機能させることを特徴とするもの。
【請求項１８】
コンピュータを、記憶部、受信部、出力部、送信部として機能させるプログラムであって、
前記記憶部は、
（ａ）ノード名の列を、自己パス名として記憶し、
（ｂ）ノード名と通信識別子との対を、子ノード名と子ＩＤとの対として０個以上記憶し、
（ｃ）当該子ＩＤは互いに重複せず、
（ｄ）当該子ノード名は互いに重複せず、
前記受信部は、他のノード装置（以下「直前ノード」という。）から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信し、
前記出力部は、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力し、
前記送信部は、前記記憶された対のいずれかについて、当該自己パス名に当該対の子ノード名を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該対の子ＩＤに対応付けられた他のノード装置に当該データを送信する
ように機能させることを特徴とするもの。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ツリー構造状に通信を行うノード装置、通信システム、ノード方法、ならびに、これらをコンピュータにて実現するプログラムに関する。
【背景技術】
【０００２】
従来から、インターネットを用いたコンピュータ間の通信は広く行われている。たとえば、ＴＣＰ／ＩＰ通信においては、ＩＰアドレスという識別子がインターネットに接続されるコンピュータ（ノード）に割り振られ、各種の情報メッセージの宛先が、ＩＰアドレスによって識別されるようになっている。ＩＰアドレスは、４バイト（もしくは８バイト）の数値列として表現され、その各ビットは、各ノードが管理される階層構造を表現している。一方で、コンピュータ通信網を利用したネットワークゲームも普及しつつある。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
このようなコンピュータ通信網においては、あるコンピュータ（ノード）が新たに通信システムの一員として参加する場合や、あるノードから他のノードへの通信を行いたい場合、あるノードから他のノードが管理する各種の資源にアクセスしたい場合などに、効率良く処理を行うための技術が求められている。
本発明は、上記のような課題を解決するためになされたもので、ツリー構造状に通信を行うノード装置、通信システム、ノード方法、ならびに、これらをコンピュータにて実現するプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００４】
以上の目的を達成するため、本発明の原理にしたがって、下記の発明を開示する。
本発明の第１の観点に係るノード装置は、記憶部と、受信部と、出力部と、送信部と、を備え、以下のように構成する。
【０００５】
すなわち、記憶部は、ノード名の列を、自己パス名として記憶し、ノード名と通信識別子との対を、子ノード名と子ＩＤとの対として０個以上記憶する。ここで、当該子ＩＤは互いに重複せず、当該子ノード名は互いに重複しない。
【０００６】
ノード名とは、当該ノード装置に割り当てられる名前であり、通信識別子とは、当該ノード装置のＩＰ（Internet Protocol）アドレス、製造番号やＭＡＣ（Media Access Control）アドレス等、他のノード装置と重複しない識別用の符号であり、これを利用して、通信の低レベル階層の宛先を表現する。
【０００７】
たとえば、当該ノード装置のノード名を「term2」とし、自己パス名としてノード名「games」、「alpha」、「user」、「tokyo」、「term2」からなる列を「/」で区切って「/games/alpha/user/tokyo/term2」を記憶し、当該ノード装置の子ノード名としてterm8とそのＩＰアドレス、term9とそのＩＰアドレス、term10とそのＩＰアドレスを記憶する場合を考える。
【０００８】
一方、受信部は、他のノード装置（以下「直前ノード」という。）から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信する。たとえば、宛先パス名としては、「/games/alpha/user/tokyo/term2」、「/games/alpha/user/tokyo/term2/term9」、「/games/alpha/user/tokyo/term2/term10/term36/term82」などが考えられる。
【０００９】
さらに、出力部は、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力する。すなわち、上記の宛先パス名として、「/games/alpha/user/tokyo/term2」が指定された場合、これは自己パス名と一致するから出力条件が満たされるので、当該データを出力する。
【００１０】
そして、送信部は、記憶された対のいずれかについて、当該自己パス名に当該対の子ノード名を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該対の子ＩＤに対応付けられた他のノード装置に当該データを送信する。
【００１１】
たとえば、上述した宛先パス名「/games/alpha/user/tokyo/term2/term9」は、自己パス名「/games/alpha/user/tokyo/term2」に子ノード名「term9」を追加したもの全体に一致するので、下り条件を満たすこととなる。したがって、子ノードterm9であるノード装置に、当該宛先パス名を指定して当該データを送信する。
【００１２】
また、「/games/alpha/user/tokyo/term2/term10/term36/term82」については、自己パス名「/games/alpha/user/tokyo/term2」に子ノード名「term10」を追加したもの「/games/alpha/user/tokyo/term2/term10」がその先頭部となっているので、下り条件を満たすこととなる。したがって、子ノードterm10であるノード装置に、当該宛先パス名を指定して当該データを送信する。
【００１３】
これにより、子ノードterm9やterm10であるノード装置は、当該ノードterm2であるノード装置と同様の処理を実行して、目的のノード装置まで当該データを配送することとなる。
【００１４】
ツリー構造中のノード（根、節、葉）に本発明のノード装置を配置して通信システムを実現すれば、各ノードは、自身の子ノードの管理を行うことによって、当該ツリー構造の上流のノード（よりルートに近いノード）から下流のノードへデータを伝送する下り通信ができるので、簡易な通信システムを構築するためのノード装置を実現することができる。
【００１５】
また、本発明のノード装置は、以下のように構成することができる。
すなわち、記憶部は、１個の通信識別子を、親ＩＤとして記憶する。ここで、当該親ＩＤと当該子ＩＤとは互いに重複しない。
親ＩＤの通信識別子に対応付けられるノード装置は、上記のようなツリー構造において、当該ノード装置よりも上流にある直近のノード装置である。すなわち、当該ノード装置は、『「その親ＩＤの通信識別子に対応付けられるノード装置」の子ノードであるノード装置』である。
【００１６】
一方、送信部は、当該自己パス名が当該宛先パス名の先頭部とも全部とも一致しない（以下「上り条件」という。）場合、記憶された親ＩＤに対応付けられた他のノード装置に当該データを送信する。
たとえば、宛先パス名「/games/alpha/user/tokyo」、「/games/alpha/user/tokyo/term1」、「/games/alpha/user/tokyo/term7/term13」などは、上り条件を満たすこととなる。
この場合は、当該宛先パス名を指定して、当該データを、親ノードに送信する。
【００１７】
親ノードでは、上記と同様の処理を行うことにより、「親ノード自身」がこれを処理するか、「親ノードの他の子ノード」と「親ノードの親ノード」とのいずれかに当該データを送信するか、を行う。これを繰り返すことによって、ツリー構造内の目的のノード装置まで、当該データを配送することになる。
【００１８】
ツリー構造中のノード（節、葉）に本発明のノード装置を配置して通信システムを実現すれば、各ノードは、自身の親ノードと子ノードの管理を行うことによって、当該ツリー構造の下流のノードから上流のノードへデータを伝送する上り通信もできるようになるので、簡易な通信システムを構築するためのノード装置を実現することができる。
【００１９】
また、本発明のノード装置は、以下のように構成することができる。
すなわち、記憶部は、１個以上の通信識別子を、代替ＩＤとしてさらに記憶する。ここで、当該代替ＩＤと当該親ＩＤと当該子ＩＤとは互いに重複しない。
すなわち、代替ＩＤは、後述するように、親ノードの代替となるノード装置の通信識別子である。
【００２０】
一方、送信部は、当該上り条件が満たされる場合であって、当該親ＩＤに対応付けられたノード装置との通信ができない場合、当該代替ＩＤに対応付けられたノード装置であって通信ができるもののいずれかに、当該データを送信する。
親ノードにデータを送信しようとしてそれが失敗した場合は、親ノード自体が停止・故障したり、当該ノードと親ノードとの間の通信網に何らかの支障が生じていると考えられる。そこで、このような場合には、代替ノードにデータを送信して、その配送を任せるのである。
本発明により、ノード装置が上り通信をしようとしたときに親ノードとの通信に失敗しても、代替ノードにデータの配送を依頼することによって、他のノード装置との通信をできるだけ可能にすることができる。
【００２１】
また、本発明のノード装置は、通信識別子（以下「自己ＩＤ」という。）を対応付けられ、以下のように構成することができる。
すなわち、記憶部は、ノード名の列と通信識別子との対を、子ノード名と子ＩＤとの対として、さらに記憶することができる。
上記の発明では、「ノード名と子ＩＤの対」を記憶していたが、本発明では、この他に「ノード名の列と子ＩＤの対」を記憶することができる。すなわちノード名の列「term10/term36/term82」を「子ノード名」として記憶することも可能となる。
【００２２】
一方、記憶された対において、当該子ノード名がノード名の列である場合、当該子ＩＤに対応付けられたノード装置は、当該自己ＩＤを、代替ＩＤとして記憶する。
したがって、子ノード名として自身の子孫ノードを指定することとなり、その子孫ノードは、代替ノードとして自身を指定することとなる。本発明では、ツリー構造における、子孫ノードのうち、孫ノード以降のノードについても、子ノードと同じように処理を行ってメッセージの直接配送を行うことができる。また、孫ノード以降のノードからは、自身は代替ノードとして機能することとなる。
【００２３】
本発明により、ノード装置は、自身の直下や直上のノード装置へ直接送信を行うほか、これよりも離れたノード装置への直接送信をも可能とし、たとえば、直下の子ノードが故障している場合にもその子ノードよりも下の子孫ノードに対してデータを送信することができるようになる。
【００２４】
また、本発明の通信装置は、報告部をさらに備え、以下のように構成することができる。
すなわち、受信されたデータには、ノード名の列が発信元パス名としてさらに指定される。
一方、報告部は、出力部による出力がされず、かつ、送信部による送信ができない場合、「当該データに指定された発信元パス名を宛先パス名として指定し、当該データの中継に失敗した旨を報告するデータ」を、当該直前ノードに送信する。
【００２５】
直前ノードに対して上記のデータを送信すれば、他のノード装置を適宜中継して、発信元のノード装置に、通常のデータと同様に上記のデータが配送されることになる。
本発明によれば、データの中継に失敗した場合に、これを発信元のノード装置に報告することができ、当該報告は、通常のデータの配送と同様の形態で行うことができるようになる。
【００２６】
また、本発明のノード装置は、アクセス部をさらに備え、以下のように構成することができる。
すなわち、受信されたデータには、ノード名の列が発信元パス名としてさらに指定され、リソース名がさらに指定される。
たとえば、パス名が「/games/alpha/user/tokyo/term1」であるノード装置が、そのリソースであるファイル「/files/settings.dat」に読み出しアクセスされる場合を考える。
【００２７】
一方、アクセス部は、出力されたデータに指定されるリソース名に対応付けられたリソースにアクセスする。
上記の例では、当該ノード装置/games/alpha/user/tokyo/term1は、自身が有するファイル/files/settings.datをオープンして、その内容を読み出す。
【００２８】
そして、送信部は、「当該データに指定された発信元パス名を宛先パス名として指定し、当該アクセスの結果を指定するデータ」を、当該直前ノードに送信する。
上記の例では、読み出しアクセスの結果は、オープンしたファイルの内容である。これによって、発信元パス名のノード装置に、自身の有するファイルの内容が配送されることになる。書き込みアクセスも同様に行うことができる。
本発明によれば、ツリー構造の通信システム内に配置されるノード装置が有するリソースに対して、他のノード装置がさまざまにアクセスできるようになる。
【００２９】
また、本発明のノード装置は、システムコール部をさらに備え、システムコール部は、パス名と、リソース名と、を、指定するシステムコールの呼び出しを受け付けて、「当該システムコールに指定されたパス名を宛先パス名として指定し、当該リソース名を指定し、当該自己パス名を発信元パス名として指定するデータ」を、送信部に送信させるように構成することができる。
【００３０】
当該システムコールは、他のノード装置が有するリソースにアクセスしようとするものであり、パス名と、リソース名と、は、別個に指定することとしても良いし、たとえば、記号「#」で区切ることとし、「/games/alpha/user/tokyo/term1#/files/settings.dat」とまとめて表記するような形態をとっても良い。
本発明によれば、自身が有するリソースに対するアクセスと同様に、他のノード装置が有する資源にアクセスするようなシステムコールの提供が容易になる。
【００３１】
また、本発明のノード装置は、追加部をさらに備え、通信識別子（以下「自己ＩＤ」という。）を対応付けられ、以下のように構成することができる。まず、当該ノード装置は、通信システムの木構造における根のノード（親ＩＤを記憶しないノード）であってもそれ以外の節や葉のノード（親ＩＤを記憶するノード）であっても良い。
【００３２】
一方、追加部は、新たな通信識別子を追加ＩＤとして指定する追加要求を受け付け、当該自己ＩＤもしくは当該対の子ＩＤからいずれか１つを選択する。
ここで、追加ＩＤは、これから新たに当該通信システムに参加しようとするノード装置の通信識別子であり、当該新たなノード装置は、ここで選択されたノード装置の子ノードとなって追加されることとなる。
【００３３】
そして、当該選択されたものが当該自己ＩＤである場合、当該追加ＩＤに対応付けられたノード装置（以下「追加装置」という。）にノード名（以下「追加ノード名」という。）を割り当て、記憶部に、当該追加ノード名と当該追加ＩＤとの対を、子ノード名と子ＩＤの対として、さらに記憶させ、当該自己パス名に当該追加ノード名を追加したもの（以下「追加パス名」という。）を、自己パス名として、当該追加装置に記憶させ、当該自己ＩＤを、親ＩＤとして、当該追加装置に記憶させる。
これによって、当該新たなノード装置は、当該追加装置の子ノードとなる。
【００３４】
一方、当該選択されたものが当該対の子ＩＤのいずれかである場合、当該子ＩＤに対応付けられたノード装置に当該追加要求を受け付けさせる。
この場合、自身の子ノード以下に新たなノード装置の追加を任せることとなる。
本発明により、通信システム内の任意のノード装置に対して、新たなノードを容易に追加して、通信システムの一員とすることができるほか、当該追加の際に、通信システム内の各ノード装置における処理の量をできるだけ低減することができるようになる。
【００３５】
また、本発明のノード装置において、追加部は、記憶される対の数が所定の閾値よりも小さい場合、当該自己ＩＤを選択するように構成することができる。
すなわち、子ノードの数が少ない場合は、新しく登録される追加装置を自分の子ノードにするのである。
本発明により、新たなノード装置が通信システムに追加される場合に、自身の子ノードとして追加するか否かを適切に判定して、通信システムの各ノード装置における処理の量をできるだけ低減することができるようになる。
【００３６】
また、本発明のノード装置において、追加部は、記憶される対の数が所定の閾値以上である場合、当該対の子ＩＤのうち、これに対応付けられたノード装置との通信が可能で、当該ノード装置との通信の頻度が所定の範囲に含まれるものを選択するように構成することができる。
すなわち、子ノードに登録を任せる場合は、通信頻度によってどの子ノードに追加を任せるかを決めるのである。
本発明により、新たなノード装置が通信システムに追加される場合に、自身の子ノードとして追加するか否か、子ノード以下に追加を任せる場合はいずれに任せるか、を適切に判定して、通信システムの各ノード装置における処理の量をできるだけ低減することができるようになる。
【００３７】
本発明のその他の観点に係る通信システムは、ツリー構造に対応付けられ、以下のように構成する。
【００３８】
当該ツリー構造において、ルートは、親ＩＤを記憶しない上記のノード装置に対応付けられ、ルート以外のノードは、親ＩＤを記憶する上記のノード装置に対応付けられる。
ツリー構造においては、根（ルート）節や葉（ルート以外）が枝によって結ばれ、上記のように、枝で直接結ばれるノード同士は、ルートに近い方が親、ルートから遠い方が子となる。
【００３９】
そして、当該ツリー構造で親ノードに対応付けられるノード装置（以下「親ノード装置」という。）と、その子ノードに対応付けられるノード装置（以下「子ノード装置」という。）と、において、当該親ノード装置は、当該子ノード装置のノード名とこれに対応付けられる通信識別子との対を、子ノード名と子ＩＤの対として記憶し、当該子ノード装置は、当該親ノード装置に対応付けられる通信識別子を、親ＩＤとして記憶する。
これによって、ツリー構造の親子関係が、それぞれのノード装置に記憶されることとなる。
本発明の通信システムによれば、上記のノード装置を適切にツリー構造内に配置して、それぞれの間の通信を効率良く行うことができる。
【００４０】
また、本発明の通信システムにおいて、当該ツリー構造において、「あるノードの子孫ノード」とは、当該ノードの子ノード、および、当該子ノードの子孫ノードをいい、「あるノードの先祖ノード」とは、当該ノードの親ノード、および、当該親ノードの先祖ノードをいい、代替ＩＤを記憶するノード装置は、その子孫ノードでないノード装置の通信識別子を、当該代替ＩＤとして記憶するように構成することができる。
【００４１】
これによって、あるノードの子孫ノードが、当該ノードの代替ノード（親ノードに代替するノード）となることを防止することができる。
本発明により、ノード装置間のツリー構造内における上下関係を適切に保つことができ、すべてのノード装置に半順序（任意の２つのノード装置を選択したときに、これらの上下関係が決まる、あるいは、これらには上下関係がない、のいずれかとなるような順序付けを「半順序」という。）をつけることができる。したがって、ノード装置間にループ構造がなくなり、効率良く通信を行うことができるようになる。
【００４２】
本発明の他の観点に係るノード方法は、受信工程と、出力工程と、送信工程と、を備え、記憶部を用い、以下のように構成する。
ここで、記憶部は、ノード名の列を、自己パス名として記憶し、ノード名と通信識別子との対を、子ノード名と子ＩＤとの対として０個以上記憶するが、当該子ＩＤは互いに重複せず、当該子ノード名は互いに重複しない。
【００４３】
一方、受信工程では、他のノード装置（以下「直前ノード」という。）から送信されたデータであって、ノード名の列が宛先パス名として指定されたものを受信する。
さらに、出力工程では、当該自己パス名が当該宛先パス名と一致する（以下「出力条件」という。）場合、当該データを出力する。
そして、送信工程では、記憶された対のいずれかについて、当該自己パス名に当該対の子ノード名を追加したものが当該宛先パス名の先頭部もしくは全部と一致する（以下「下り条件」という。）場合、当該対の子ＩＤに対応付けられた他のノード装置に当該データを送信する。
【００４４】
本発明のその他の観点に係るプログラムは、コンピュータを上記ノード装置として機能させ、または、コンピュータに上記ノード方法を実行させるように構成する。
また、本発明のプログラムは、コンパクトディスク、フレキシブルディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリ等のコンピュータ読取可能な情報記憶媒体に記録することができる。
上記プログラムは、プログラムが実行されるコンピュータとは独立して、コンピュータ通信網を介して配布・販売することができる。また、上記情報記憶媒体は、コンピュータとは独立して配布・販売することができる。
【発明の効果】
【００４５】
本発明によれば、ツリー構造状に通信を行うノード装置、通信システム、ノード方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
【発明を実施するための最良の形態】
【００４６】
以下に本発明の実施形態を説明する。以下では、理解を容易にするため、汎用ゲーム装置に本発明が適用される実施形態を説明するが、各種のコンピュータ、ＰＤＡ（Personal Data Assistants）、携帯電話などの情報処理装置においても同様に本発明を適用することができる。すなわち、以下に説明する実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。したがって、当業者であればこれらの各要素もしくは全要素をこれと均等なものに置換した実施形態を採用することが可能であるが、これらの実施形態も本発明の範囲に含まれる。
【実施例１】
【００４７】
（通信システムの構成）
図１は、本発明の実施形態の１つに係る通信システムの概要構成を示す説明図である。以下、本図を参照して説明する。
本図に示すように、本実施形態の通信システム１０は、ツリー構造をなしている。一般に、ツリー構造には１つの根（ルート）、複数の節、複数の葉がある。これらの根、節、葉をまとめてノードと呼ぶ。
【００４８】
ノードとノードとの間には、枝が張られており、枝を一つの方向にたどっていくと、ルートノード１１に到達する。この方向を「上流」と呼ぶ。そして、１つの枝の両端のノードの上流側を親ノード、下流側を子ノードと呼ぶ。
【００４９】
ルートノード１１は、複数の子ノードを有するが、親ノードを有しないノードである。一方、ルート以外のノードは、１つの親ノードを有し、０個以上の子ノードを有する。子ノードを持たないノードは、ツリー構造の葉に相当し、子ノードを１個以上有するノードは、ツリー構造の節に相当する。
【００５０】
そして、本通信システム１０の各ノードには、ノード装置とノード名とが割り当てられている。本図に示す例では、ルートノード１１には「games」が、その子ノードの一つには「alpha」が、その子ノードの一つには「user」が、その子ノードの一つには「tokyo」が、その子ノードの一つ（図中の１２）には「term2」が、…のように、それぞれノード名が割り当てられている。
【００５１】
同じ親を共有する子ノード同士は、異なるノード名を有することとして、子ノード同士の区別ができるようにする。たとえば、ノード１２の子ノードには、「term9」と「term10」とがあるが、これらは異なるノード名である。
【００５２】
各ノード装置の通信システム１０のツリー構造における位置は、ルートノード１１から当該ノードまで枝を辿っていった場合に通過するノード名を、順に並べることによって表現できる。このノード名の列を、「/」で区切って並べたものを、「絶対パス名」と呼ぶ。たとえば、本図に示す例では、ノード１２の絶対パス名は「/games/alpha/user/tokyo/term2」となる。また、親ノードの絶対パス名にその子ノード名を追加すると、当該子ノードの絶対パス名となる。
【００５３】
あるノードから枝を下流にたどって行くことにより、到達しうるノードを、当該ノードの子孫ノードという。また、あるノードから枝を上流にたどって行くことにより、到達しうるノードを、当該ノードの先祖ノードという。本図では、ノード１２の先祖ノード１３と、ノード１２の子孫ノード１４と、が、それぞれ点線で囲まれて表示されている。
【００５４】
（下り通信）
図２は、通信システム１０のツリー構造内のあるノードからその子孫ノードへデータが送信される様子を示す説明図である。これを下り通信と呼ぶ。以下、本図を参照して説明する。
【００５５】
本例では、発信元ノード２１の絶対パス名は「/games/alpha/user」であり、宛先ノード２２の絶対パス名は「/games/alpha/user/tokyo/term2/term10/term36」である。このように、上記のように、子ノードの絶対パス名は、親ノードの絶対パス名に子ノードのノード名を追加したものであるから、「発信元ノード２１の絶対パス名の全体」と、「宛先ノード２２の絶対パス名の先頭部分」と、が一致する場合は、宛先ノード２２は発信元ノード２１の子孫ノードであり、発信元ノード２１は宛先ノード２２の先祖ノードである。
【００５６】
さて、宛先を「/games/alpha/user/tokyo/term2/term10/term36」とするデータを、ノード「/games/alpha/user」が送信しようとするときは、まず、自身の絶対パス名と宛先の絶対パス名とを比較する。すると、自身の絶対パス名は、宛先の絶対パス名の先頭部分と一致するから、当該データは、自身のいずれかの子ノードに送信することとなる。
【００５７】
また、自身の子ノードにはノード名「tokyo」のノードがあり、自身の絶対パス名にこれを追加した「/games/alpha/user/tokyo」（子ノードの絶対パス名）は、当該宛先の絶対パス名の先頭部分と一致する。したがって、当該データは、「/games/alpha/user」から「/games/alpha/user/tokyo」に送信されることになる。
【００５８】
次に、ノード「/games/alpha/user/tokyo」は、宛先を「/games/alpha/user/tokyo/term2/term10/term36」とするデータを、送信することとなるが、この場合も、上記の処理と同様に、子ノードからノード名「term2」のノードを選択して、これに当該データを送信する。
【００５９】
以下同様に繰返すと、ノード「/games/alpha/user/tokyo/term2/term10/term36」に、当該データが到着する。すると、宛先と、自身の絶対パス名が一致するので、当該ノード「/games/alpha/user/tokyo/term2/term10/term36」が当該データを受信して、適宜処理を行うのである。
【００６０】
（上り通信）
図３は、通信システム１０のツリー構造内のあるノードからその先祖ノードへデータが送信される様子を示す説明図である。これを上り通信と呼ぶ。
【００６１】
上り通信は、下り通信と逆であるが、ある意味では下り通信よりも処理は容易である。上述したように、下り通信は、宛先の絶対パス名の先頭部分もしくは全部が自身の絶対パス名と一致する場合に行われるが、そうでない場合は、親ノードにデータを送信する。するとデータは、「宛先の絶対パス名の先頭部分もしくは全部が自身の絶対パス名と一致する」まで、ツリー構造を上流に移動していくことになる。
【００６２】
本図に示すように、発信元ノード３１の先祖ノードが宛先ノード３２である場合には、このようにデータが上流に移動していく間に、いつかは「宛先の絶対パス名が自身の絶対パス名と一致する」ようなノードに到達することになる。当該ノードは、まさに宛先ノード３２である。
【００６３】
（上り通信と下り通信の組合せ）
通信システム１０のツリー構造では、あるノードＡから他のノードＢへの経路が必ず１つ定まり、当該経路は、これらのノードの先祖ノードのうち、最も下流にあるノードＣを中継する。図４は、これらの様子を示す説明図である。すなわち、本実施形態の通信システム１０では、ノードＡを発信元ノード４１とし、ノードＢを宛先ノード４３とする通信は、ノードＣを最上位の中継ノード４２として、ノードＡからノードＣまでは上り通信によって伝送が行われ、ノードＣからノードＢまでは下り通信によって伝送が行われる。
【００６４】
上述した通り、各ノードは、
（１）宛先の絶対パス名全体が自身の絶対パス名と一致する場合は、当該データは自身が受信して、処理を行う（受信）。
（２）宛先の絶対パス名の先頭部分が自身の絶対パス名と一致し、宛先の絶対パス名の先頭部分もしくは全部が自身の絶対パス名に子ノードのノード名を追加したものと一致する場合は、当該子ノードにこれを送信する（子ノードへ中継、下り通信）。
（３）宛先の絶対パス名全体も先頭部分も自身の絶対パス名と一致しない場合は、親ノードにこれを送信する（親ノードへ中継、上り通信）。
という単純な処理を行うことによって、ツリー構造内の任意のノードから他の任意のノードへ、データを伝送することができる。以下、本発明の各ノードに割り当てられるノード装置の詳細について、説明する。
【００６５】
（ノード装置）
図５は、本発明の実施形態の１つに係るノード装置が実現される典型的な汎用ゲーム装置の概要構成を示す模式図である。以下、本図を参照して説明する。
【００６６】
ゲーム装置１００は、ＣＰＵ（Central Processing Unit）１０１と、ＲＯＭ  １０２と、ＲＡＭ  １０３と、インターフェース１０４と、コントローラ１０５と、外部メモリ１０６と、画像処理部１０７と、ＤＶＤ−ＲＯＭドライブ１０８と、ＮＩＣ（Network Interface Card）１０９と、を備える。
【００６７】
ゲーム用のプログラムおよびデータを記憶したＤＶＤ−ＲＯＭをＤＶＤ−ＲＯＭドライブ１０８に装着して、ゲーム装置１００の電源を投入することにより、プログラムが実行され、本実施形態のゲーム装置が実現される。
ＣＰＵ  １０１は、ゲーム装置１００全体の動作を制御し、各構成要素と接続され制御信号やデータをやりとりする。
【００６８】
ＲＯＭ  １０２には、電源投入直後に実行されるＩＰＬ（Initial Program Loader）が記録され、これが実行されることにより、ＤＶＤ−ＲＯＭに記録されたプログラムをＲＡＭ  １０３に読み出してＣＰＵ  １０１による実行が開始される。また、ＲＯＭ  １０２には、ゲーム装置１００全体の動作制御に必要なオペレーティングシステムのプログラムや各種のデータが記録される。
【００６９】
ＲＡＭ  １０３は、データやプログラムを一時的に記憶するためのもので、ＤＶＤ−ＲＯＭから読み出したプログラムやデータ、その他ゲームの進行やチャット通信に必要なデータが保持される。
インターフェース１０４を介して接続されたコントローラ１０５は、ユーザがゲーム実行のための操作入力、他のゲーム装置に対して送信すべきデータのデータ入力、他のゲーム装置を指定する宛先入力などの、各種の入力を受け付ける。後述するモニタなどを利用して、ソフトウェアキーボードによりこれらのデータ入力、宛先入力を行うことができる。また、コントローラ１０５のかわりにマウスやキーボードなどを利用しても良い。
【００７０】
インターフェース１０４を介して着脱自在に接続された外部メモリ１０６には、ゲームの進行状態を示すデータ、チャット通信のログ（記録）のデータなどが書き換え可能に記憶される。ユーザは、コントローラ１０５を介して指示入力を行うことにより、これらのデータを適宜外部メモリ１０６に記録することができる。
【００７１】
ＤＶＤ−ＲＯＭドライブ１０８に装着されるＤＶＤ−ＲＯＭには、ゲームを実現するためのプログラムとゲームに付随する画像データや音声データが記録される。ＣＰＵ  １０１の制御によって、ＤＶＤ−ＲＯＭドライブ１０８は、これに装着されたＤＶＤ−ＲＯＭに対する読み出し処理を行って、必要なプログラムやデータを読み出し、これらはＲＡＭ  １０３等に一時的に記憶される。
【００７２】
画像処理部１０７は、ＤＶＤ−ＲＯＭから読み出されたデータをＣＰＵ  １０１や画像処理部１０７が備える画像演算プロセッサ（図示せず）によって加工処理した後、これを画像処理部１０７が備えるフレームメモリ（図示せず）に記録する。フレームメモリに記録された画像情報は、所定の同期タイミングでビデオ信号に変換され画像処理部１０７に接続されるモニタ（図示せず）へ出力される。これにより、各種の画像表示が可能となる。
【００７３】
画像演算プロセッサは、２次元の画像の重ね合わせ演算やαブレンディング等の透過演算、各種の飽和演算を高速に実行できる。また、仮想３次元空間に配置され、各種のテクスチャ情報が付加されたポリゴン情報を、Ｚバッファ法によりレンダリングして、所定の視点位置から仮想３次元空間に配置されたポリゴンを俯瞰したレンダリング画像を得る演算の高速実行も可能である。
【００７４】
ＮＩＣ  １０９は、ゲーム装置１００をインターネット等のコンピュータ通信網（図示せず）に接続するためのものであり、ＬＡＮ（Local Area Network）を構成する際に用いられる１０ＢＡＳＥ−Ｔ／１００ＢＡＳＥ−Ｔ規格にしたがうものや、電話回線を用いてインターネットに接続するためのアナログモデム、ＩＳＤＮ（Integrated Services Digital Network）モデム、ＡＤＳＬ（Asymmetric Digital Subscriber Line）モデム、ケーブルテレビジョン回線を用いてインターネットに接続するためのケーブルモデム等と、これらとＣＰＵ  １０１との仲立ちを行うインターフェース（図示せず）により構成される。
【００７５】
なお、ＮＩＣ  １０９には、他のＮＩＣとは重複しないユニークな識別子が割り当てられている。ＭＡＣアドレスは、このようなユニークな識別子である。また、ルータ等を用いずに、ゲーム装置１００がインターネットに接続される場合には、他のネットワーク機器とは重複しないグローバルＩＰアドレスが、当該ＮＩＣ  １０９に割り当てられることになる。また、あるローカルなネットワーク内に当該ゲーム装置１００が配置される場合には、当該ネットワーク内で他のネットワーク機器とは重複しないローカルＩＰアドレスが、当該ＮＩＣ  １０９に割り当てられることになる。本実施形態では、これらの情報を、当該ゲーム装置１００の通信識別子として利用する。
【００７６】
音声処理部１１０は、ＤＶＤ−ＲＯＭから読み出した音声データや、ＭＩＤＩ（Musical Instrument Digital Interface）データなど各種の演奏データによって音源装置を駆動して得られる音声データをアナログ音声信号に変換し、これに接続されたスピーカ（図示せず）から出力させる。また、ＣＰＵ  １０１の制御の下、ゲームの進行の中で発生させるべき効果音や楽曲データを生成し、これに対応した音声をスピーカから出力させる。
【００７７】
このほか、ゲーム装置１００は、ハードディスク等の大容量外部記憶装置を用いて、ＲＯＭ  １０２、ＲＡＭ  １０３、外部メモリ１０６、ＤＶＤ−ＲＯＭドライブ１０８に装着されるＤＶＤ−ＲＯＭ等と同じ機能を果たすように構成してもよい。
【００７８】
また、ユーザからの文字列の編集入力を受け付けるためのキーボードや、各種の位置の指定および選択入力を受け付けるためのマウスなどを接続する形態も採用することができる。また、本実施形態のゲーム装置１００にかえて、汎用のパーソナルコンピュータを利用することもできる。
【００７９】
図６は、当該ゲーム装置１００上に実現されるノード装置の概要構成を示す模式図である。以下本図を参照して説明する。
本実施形態のノード装置６０１は、記憶部６０２と、受信部６０３と、出力部６０４と、送信部６０５と、報告部６０６と、アクセス部６０７と、システムコール部６０８と、追加部６０９と、を備える。
ここで、記憶部６０２は、当該ノード装置６０１が管理する各種の情報を記憶する。図７は、記憶部６０２に記憶される情報の様子を示す説明図である。以下、本図を参照して説明する。
【００８０】
まず、記憶部６０２は、当該ノード装置６０１が通信システム１０のツリー構造内において配置される位置を示す絶対パス名を記憶する。以下、これを「自己パス名」と呼ぶ。本図に示す例では、自己パス名として、「/games/alpha/user/tokyo/term2」が記憶されている。
【００８１】
また、記憶部６０２は、子ノードの名前と、子ノードの通信識別子（ＩＰアドレス）と、を表形式で記憶している。本図に示す例では、子ノード名term9、term10が記憶され、そのそれぞれのノード装置のＩＰアドレスも記憶されている。これらのＩＰアドレスを有するノード装置の絶対パス名は、それぞれ、「/games/alpha/user/tokyo/term2/term9」「/games/alpha/user/tokyo/term2/term10」になる。子ノードの通信識別子を、「子ＩＤ」という。これらの子ノード名は重複してはならない。また、上記のように、子ＩＤは、互いに重複しない。
【００８２】
さらに、記憶部６０２は、親ノードの通信識別子（ＩＰアドレス）も記憶する。親ノードの通信識別子を、「親ＩＤ」という。親ノードの絶対パス名は、自身の絶対パス名から最後のノード名を除去した「/games/alpha/user/tokyo」であるので、別途記憶する必要はない。なお、当該ノード装置６０１が、ルートノード１０「/games」である場合には、親ノードは存在しないので、「親ＩＤ」もないことになる。
このほか、記憶部６０２が記憶する情報については、後述する。
【００８３】
さて、図８は、ノード装置６０１にて実行される処理の主要部分の制御の流れを示すフローチャートである。以下、これらの図を参照しつつ、説明する。
【００８４】
まず、ノード装置６０１の受信部６０３は、他のノード装置（以下「直前ノード」という。）から送信されたデータを受信する（ステップＳ８０１）。当該データには、発信元のノード装置を表す絶対パス名（以下「発信元パス名」という。）と、宛先のノード装置を表す絶対パス名（以下「宛先パス名」という。）と、が指定されている。本実施形態では、各ノード装置６０１は、自身の親ノードや子ノードとだけ通信するので、直前ノードはこれらのいずれかである。なお、受信部６０３におけるデータの受信の待機時には、他の処理を実行することが可能である。
【００８５】
そして、出力条件「自己パス名が宛先パス名全体と一致する」が満たされるか否かを判定する（ステップＳ８０２）。出力条件が満たされる場合（ステップＳ８０２；Ｙｅｓ）、出力部６０４は、当該データを、自身が処理すべきものとして出力して他の処理に委ね（ステップＳ８０３）、ステップＳ８０１に戻る。図７に示す例で考えると、宛先パス名が「/games/alpha/user/tokyo/term2」である場合には、出力条件が満たされることとなる。
【００８６】
一方、出力条件が満たされない場合（ステップＳ８０２；Ｎｏ）、当該ノード装置６０１が記憶する子ノード名のそれぞれについて、下り条件「自己パス名に子ノード名を追加したものが、宛先パス名の先頭部もしくは全体と一致する」が満たされるか否かを判定する（ステップＳ８０４）。下り条件を満たす子ノードが存在する場合（ステップＳ８０４；Ｙｅｓ）、送信部６０５は、当該子ノード名に対応付けられる子ＩＤを有するノード装置に、発信元パス名や宛先パス名はそのままとして、当該データを送信して中継し（ステップＳ８０５）、ステップＳ８０１に戻る。図７に示す例で考えると、宛先パス名が「/games/alpha/user/tokyo/term2/term9」「/games/alpha/user/tokyo/term2/term10」「/games/alpha/user/tokyo/term2/term10/term36」の場合等は、下り条件が満たされることになる。
【００８７】
一方、下り条件が満たされない場合（ステップＳ８０４；Ｎｏ）、上り条件「自己パス名が宛先パス名の全部とも先頭部とも一致しない」が満たされるか否かを判定する（ステップＳ８０６）。上り条件が満たされる場合（ステップＳ８０６；Ｙｅｓ）、送信部６０５は、当該親ＩＤを有するノード装置に、発信元パス名や宛先パス名はそのままとして、当該データを送信して中継し（ステップＳ８０７）、ステップＳ８０１に戻る。
【００８８】
一方、上り条件が満たされない場合（ステップＳ８０６；Ｎｏ）、すなわち、上述の制御フローからみると、自己パス名が宛先パス名の先頭部と一致する場合であって、下り条件が満たされない場合は、宛先パス名が間違っているものと考えられる。そこで、報告部６０６は、「当該データに指定された発信元パス名を宛先パス名として指定し、当該データの中継に失敗した旨を報告するデータ」を、当該直前ノードに送信して中継し（ステップＳ８０８）、ステップＳ８０１に戻る。
【００８９】
このようなエラーを報告するデータであっても、通常のデータと同様に、ツリー構造内で伝送されるのである。
【００９０】
なお、上記ステップＳ８０５やステップＳ８０７において、子ノードや親ノードにデータを送信する際に、子ノードや親ノードが何らかの事情で停止していたり、故障していたり、自身とこれらのノードとの間のコンピュータ通信網に問題が生じていたりして、送信が失敗した場合にも、報告部６０６が同様の処理を行うが、理解を容易にするため、この処理については、図示を省略した。
【実施例２】
【００９１】
以下では、上記の主要な制御フローに対するさまざまな実施態様の詳細について種々説明する。
【００９２】
まず、図７を参照すると、記憶部６０２には代替ＩＤが複数記憶されている。代替ＩＤは、他のノード装置の通信識別子であり、上り条件が満たされ、かつ、親ノードとの通信に失敗した場合に親ノードのかわりに中継に用いるものである。したがって、代替ＩＤに対応付けられる代替ノード装置は、親ノードでも子ノードでもないが、必ずしも先祖ノードの中から選択する必要はない。
【００９３】
また、代替ノードは、いずれの子孫ノードでもないことが望ましい。子孫ノードを代替ノードとしてしまうと、データがループしてしまうからである。
もっとも、データのパケットにカウンタ領域を設け、中継が１回なされるたびに当該カウンタ領域に指定される値を１増やして伝送する、という処理を行い、カウンタ領域に指定される値が一定値よりも大きくなったら（たとえば、発信元パス名に含まれるノード名の数と、宛先パス名に含まれるノード名の数と、の和や、当該和に所定値を加算したものや、当該和に所定値を乗算したもの等。）、中継に失敗したものとして報告部６０６にその旨を報告させるような形態をとれば、代替ノードとして子孫ノードを採用しても、ループの問題は生じない。
【００９４】
また、図７を参照すると、子ノード名と子ＩＤのほかに、子孫ノード名と、当該子孫ノードの通信識別子（子孫ＩＤ）も記憶されている。本図では、子孫ノード名として「term10/term36」が、その子孫ＩＤに対応付けて記憶されている。
【００９５】
この場合、下り条件における「子ノード名」「子ＩＤ名」のかわりに、「子孫ノード名」「子孫ＩＤ」を利用すれば、子ノードよりも下流の子孫ノードにデータを中継してしまうことも可能である。
【００９６】
たとえば、宛先として「/games/alpha/user/tokyo/term2/term10/term36/term82」が指定された場合、下り条件を満たす子孫ノードは、term10とterm10/term36となるが、このような場合には、より下流に位置する子孫ノードに、当該データを送信して中継を委ねることとなる。
【００９７】
さらに、図７を参照すると、ジャンプノード名「/games/alpha/user/kyoto/term58」、当該ジャンプノードの通信識別子（ジャンプＩＤ）も記憶されている。ジャンプノード名は記号「／」から開始されており、これによって子ノード名や子孫ノード名と区別することができる。
【００９８】
この場合、出力条件、下り条件、上り条件のいずれも満たされない場合に、ジャンプ条件「宛先パス名の先頭部もしくは全体が、ジャンプノード名と一致する」が満たされるか否かを判定し、これが満たされる場合には、当該ジャンプノードに当該データを送信して中継するのである。また、下り条件や上り条件の判定を行う前にジャンプ条件の判定を行っても良い。
このようなジャンプノード名、ジャンプＩＤ、ジャンプ条件を採用すると、通信システム１０のツリー構造における枝を通過する経路によって通信を行うだけではなく、これとは異なる経路によっても通信を行うことができるようになる。
【実施例３】
【００９９】
（データの処理の実施形態）
上記実施形態では、出力条件を満たす場合には、出力部６０４が当該データを出力して他の処理に委ねることとしていたが、以下では、その処理の例についてさらに説明する。上述のように、ノード装置６０１は、アクセス部６０７をさらに備える。アクセス部６０７は、当該ノード装置６０１が有するリソースにアクセスする。リソースとしては、たとえば、ノード装置６０１が有する外部メモリ１０６やこれに記憶されるファイル、ＤＶＤ−ＲＯＭドライブ１０８に装着されるＤＶＤ−ＲＯＭやこれに記憶されるファイル、コントローラ１０５など、種々のハードウェアやこれに対応する各種のデータ等が考えられる。
【０１００】
アクセス部６０７が動作する場合は、受信されたデータにリソース名と、当該リソースに対するアクセスの種類とが指定されている場合である。リソース名は、各リソースごとに重複しないものとする。
【０１０１】
ノード装置６０１「/games/alpha/user/tokyo/term2」の外部メモリ１０６に記憶されるファイルのそのリソース名として「/files/settings.dat」を割り当てた場合に、これに対して「読み出し」のアクセスが指定されている場合を考える。この場合、アクセス部６０７は、外部メモリ１０６内の当該ファイルをオープンして、その内容を読み出す。
【０１０２】
そして、送信部６０５に、「当該データに指定された発信元パス名を宛先パス名として指定し、当該アクセスの結果を指定するデータ」を、当該直前ノードへ送信させる。これによって、ファイルの読み出しアクセスを要求してきたノード装置に対して、当該ファイルの内容を返送することができる。
【０１０３】
アクセスの種類としては、ファイルの読み出しや書き込みなどのほか、コントローラ１０５の押下状態の取得、ＤＶＤ−ＲＯＭドライブ１０８にＤＶＤ−ＲＯＭが装着されているか否かの問い合わせ、ＲＡＭ  １０３の使用量や空容量の問い合わせ、ＮＩＣ  １０９のＭＡＣアドレスの問い合わせ等、種々のものを採用することができる。
【０１０４】
一方、アクセス部６０７を上記のように動作させるデータを構成するために機能するのがシステムコール部６０８である。
【０１０５】
システムコール部６０８は、パス名と、リソース名と、を、指定するシステムコールの呼び出しを受け付けて、「当該システムコールに指定されたパス名を宛先パス名として指定し、当該リソース名を指定し、当該自己パス名を発信元パス名として指定するデータ」を、送信部６０５に送信させる。
【０１０６】
当該システムコールは、他のノード装置が有するリソースにアクセスしようとするものであり、パス名と、リソース名と、は、別個に指定することとしても良いし、たとえば、記号「#」で区切ることとし、「/games/alpha/user/tokyo/term1#/files/settings.dat」とまとめて表記するような形態をとっても良い。このような形態をとることとすれば、自分が所有するリソースに対するアクセスと同様の形態で、他のノード装置が所有するリソースに対するアクセスを表現することも可能になる。
【０１０７】
各種のＯＳにおけるopen()/read()/write()システムコールにおいては、パス名としては、ファイル名のほか、各種のデバイス名等を指定することができ、各種のデバイスをあたかもファイルであるかのように利用できることとしているものがある。本実施形態においても、これと同様に、他のノード装置が有するリソースに対するアクセスも、通常のファイルに対するアクセスと同様に行うのである。
【実施例４】
【０１０８】
（新たなノード装置の追加）
ノード装置６０１の追加部６０９は、新たなノード装置が当該通信システム１０に参加を開始しようとする場合に、機能する。なお、以下では、ノード装置６０１自身の通信識別子を「自己ＩＤ」と呼ぶ。
【０１０９】
すなわち、受信部６０３が受信したデータが、新たなノード装置の通信識別子（以下「追加ＩＤ」という。）を指定する追加要求であった場合は、追加部６０９は、自己ＩＤ、もしくは、子ＩＤからいずれか１つを選択する。選択の手法としては、以下のようなものが考えられる。
【０１１０】
最も単純な手法は、常に自己ＩＤを選択する、というものである。この場合には、追加要求を受信したノード装置６０１が、必ず、新たなノード装置と親子関係を結ぶことになる。
【０１１１】
このほか、当該ノード装置６０１が記憶する子ＩＤの数が所定の閾値に達していない場合は、当該ノード装置６０１の自己ＩＤを選択する、という手法もある。この場合は、各ノード装置６０１に割り当てられる子ノードの数をできるだけ一定数に制限することができ、これによって、各ノード装置６０１の通信処理の負荷分散を図ることができる。
【０１１２】
さらに、自己ＩＤを選択しない場合に、複数の子ＩＤがあるときは、これに対応付けられたノード装置との通信が可能で、当該ノード装置との通信の頻度が所定の範囲（通信の頻度がある閾値よりも低い、等。）に含まれるものを選択する、という手法も採用できる。この場合も、負荷分散を図ることができる。
【０１１３】
さて、このようにして、自己ＩＤが選択された場合は、追加部６０９は、他の子ノード名と重複しないノード名（以下「追加ノード名」という。）を乱数等を用いて生成して、追加ノード名と追加ＩＤとを対応付けて、これらを子ノード名と子ＩＤとして記憶部６０２に記憶する。
【０１１４】
さらに、自己パス名に追加ノード名を連結して、当該新たなノード装置の絶対パス名を生成し、これと、自己ＩＤとを、当該新たなノード装置に送信して、それぞれ、自己パス名、ならびに、親ＩＤとして、当該新たなノード装置に記憶させる。
【０１１５】
これによって、追加要求を受信したノード装置と、追加要求を行ったノード装置と、の間に、親子関係が結ばれるのである。
【０１１６】
一方、子ＩＤが選択された場合には、当該追加要求をそのまま当該子ＩＤのノード装置に送信して中継する。これによって、追加要求は、その子ノードに委ねられることとなる。以降は、当該子ノードが、同様の処理を行って、新たなノード装置をツリー構造内に配置する。
【０１１７】
このようにして、新たなノード装置が通信システム１０に追加される場合に、自身の子ノードとして追加するか否か、子ノード以下に追加を任せる場合はいずれに任せるか、を適切に判定して、負荷分散を図ることができるとともに、新たなノード装置の追加という処理が、ツリー構造内のきわめてローカルな部分のみで実行できることとなり、ツリー構造の他のノード装置に影響を与えずに行うことができる。
【産業上の利用可能性】
【０１１８】
以上説明したように、本発明によれば、ツリー構造状に通信を行うノード装置、通信システム、ノード方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができ、各種の端末やコンピュータなどがコンピュータ通信網を介して通信し合う通信システムに適用することができる。
【図面の簡単な説明】
【０１１９】
【図１】本発明の実施形態の１つに係る通信システムの概要構成を示す説明図である。
【図２】通信システムのツリー構造内のあるノードからその子孫ノードへデータが送信される様子を示す説明図である。
【図３】ツリー構造内のあるノードからその先祖ノードへデータが送信される様子を示す説明図である。
【図４】ツリー構造内のあるノードから他のノードへ、上り通信と下り通信によってデータが送信される様子を示す説明図である。
【図５】本発明の実施形態に係るノード装置が実現される典型的なゲーム装置の概要構成を示す模式図である。
【図６】本実施形態のノード装置の概要構成を示す模式図である。
【図７】本実施形態のノード装置の記憶部が記憶する情報の様子を示す説明図である。
【図８】本実施形態のノード装置にて実行される処理の制御の流れを示すフローチャートである。
【符号の説明】
【０１２０】
１０    通信システム
１１    ルートノード
１２    ノード
１３    ノード
２１    発信元ノード
２２    宛先ノード
３１    発信元ノード
３２    宛先ノード
４１    発信元ノード
４２    最上位の中継ノード
４３    宛先ノード
１００  ゲーム装置
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  インターフェース
１０５  コントローラ
１０６  外部メモリ
１０７  画像処理部
１０８  ＤＶＤ−ＲＯＭドライブ
１０９  ＮＩＣ
１１０  音声処理部
６０１  ノード装置
６０２  記憶部
６０３  受信部
６０４  出力部
６０５  送信部
６０６  報告部
６０７  アクセス部
６０８  システムコール部
６０９  追加部
【図１】
2005197767.tif 000003
【図２】
2005197767.tif 000004
【図３】
2005197767.tif 000005
【図４】
2005197767.tif 000006
【図５】
2005197767.tif 000007
【図６】
2005197767.tif 000008
【図７】
2005197767.tif 000009
【図８】
2005197767.tif 000010