(57)【要約】【課題】通信インタフェースのハードウェア処理を活用してオブジェクトの送信を効率化できるようにする。【解決手段】通信インタフェース１１は、それぞれが２以上のデータ項目を含む複数のオブジェクト型に対応するコネクション３ａ，３ｂ，３ｃを情報処理装置２０との間に確立する。制御部１２は、送信するオブジェクトの型が複数のオブジェクト型の何れかに該当するとき、コネクション３ａ，３ｂ，３ｃの中から当該オブジェクトの型に対応するコネクションを選択し、選択したコネクションを用いて当該オブジェクトを情報処理装置２０に送信するように通信インタフェース１１を制御する。【選択図】図１
2014123182.tif 000002
【特許請求の範囲】
【請求項１】
他のコンピュータと通信を行うコンピュータに、
それぞれが２以上のデータ項目を含む複数のオブジェクト型に対応する複数のコネクションを前記他のコンピュータとの間に確立し、
送信するオブジェクトの型が前記複数のオブジェクト型の何れかに該当するとき、前記複数のコネクションの中から当該オブジェクトの型に対応するコネクションを選択し、前記選択したコネクションを用いて当該オブジェクトを前記他のコンピュータに送信する、
処理を実行させるプログラム。
【請求項２】
前記オブジェクトを送信するとき、前記コンピュータが備えるメモリに記憶された前記オブジェクトを前記選択したコネクションに応じたフォーマットに変換する、
請求項１記載のプログラム。
【請求項３】
前記コンピュータに更に、
前記他のコンピュータへのオブジェクトの送信状況を監視し、
前記送信状況に基づいて、前記複数のオブジェクト型以外のオブジェクト型に対応するコネクションを追加すること、および、前記複数のオブジェクト型の一部に対応するコネクションを切断することの少なくとも一方を行う、
処理を実行させる請求項１記載のプログラム。
【請求項４】
それぞれが２以上のデータ項目を含む複数のオブジェクト型に対応する複数のコネクションを他の情報処理装置との間に確立する通信インタフェースと、
送信するオブジェクトの型が前記複数のオブジェクト型の何れかに該当するとき、前記複数のコネクションの中から当該オブジェクトの型に対応するコネクションを選択し、前記選択したコネクションを用いて当該オブジェクトを前記他の情報処理装置に送信するように前記通信インタフェースを制御する制御部と、
を有する情報処理装置。
【請求項５】
第１の情報処理装置と第２の情報処理装置との間に、それぞれが２以上のデータ項目を含む複数のオブジェクト型に対応する複数のコネクションを確立し、
送信するオブジェクトの型が前記複数のオブジェクト型の何れかに該当するとき、前記複数のコネクションのうち当該オブジェクトの型に対応するコネクションを用いて、当該オブジェクトを前記第１の情報処理装置から前記第２の情報処理装置に送信し、
前記第２の情報処理装置が備える前記オブジェクトを受信する通信インタフェースから前記第２の情報処理装置が備えるメモリに、当該オブジェクトを受信したコネクションに応じた方法で当該オブジェクトに含まれる前記２以上のデータ項目を配置する、
オブジェクト送信方法。
【請求項６】
前記通信インタフェースに、前記複数のコネクションそれぞれに対応付けて当該コネクションで送信されるオブジェクトのフォーマットを示すフォーマット情報を設定し、
前記メモリへの前記２以上のデータ項目の配置は、前記通信インタフェースが前記オブジェクトを受信したコネクションに対応するフォーマット情報を用いて行う、
請求項５記載のオブジェクト送信方法。
【請求項７】
前記メモリにテーブル領域を確保しておき、
前記２以上のデータ項目の少なくとも一部については、オブジェクトを受信する毎に新たな記憶領域を前記メモリ内に確保せずに前記テーブル領域を再利用する、
請求項５記載のオブジェクト送信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム、情報処理装置およびオブジェクト送信方法に関する。
【背景技術】
【０００２】
現在、ソフトウェアを開発するときプログラミング言語としてオブジェクト指向言語を用いることが多くなっている。オブジェクト指向言語では、オブジェクトの種類として、フィールドとメソッドとを含むオブジェクトの型を定義しておく。オブジェクトの型はクラスと呼ぶこともあり、フィールドは属性やメンバ変数と呼ぶこともあり、メソッドはメンバ関数と呼ぶこともある。オブジェクト指向言語で記述されたプログラムを実行すると、オブジェクトの型からフィールドに具体的なデータを代入したオブジェクトが生成される。コンピュータのメモリ上には、オブジェクトの構造に応じてそのオブジェクトに含まれるフィールドのデータが配置される。１つのオブジェクトに含まれる複数のフィールドのデータが、メモリの連続した記憶領域に格納されるとは限らない。
【０００３】
上記のようなオブジェクト指向言語は、複数のコンピュータがネットワークを介して通信する分散処理システムで動作するソフトウェアを開発するときに用いられることもある。オブジェクト指向言語で記述されたプログラムを複数のコンピュータに実行させると、あるコンピュータから他のコンピュータにオブジェクトが送信されることがある。
【０００４】
従来、送信側では、ライブラリやフレームワークなどのミドルウェアにより、オブジェクトがネットワークで伝送可能な形式のメッセージに変換される（シリアライズ）。例えば、複数のフィールドのデータが所定の規則に従った順序で並べられる。そして、シリアライズされたメッセージが、オペレーティングシステム（ＯＳ：Operating System）および通信インタフェースを介してネットワークに出力される。受信側では、通信インタフェースおよびＯＳを介して、シリアライズされたメッセージが取得される。そして、ライブラリやフレームワークなどのミドルウェアにより、メッセージから各フィールドのデータが抽出されてメモリ上にオブジェクトが復元される（デシリアライズ）。
【０００５】
なお、あるノードから他のノードにメッセージを送信するにあたって、受信側ノードの主記憶に複数の受信バッファを設け、受信側ノードのネットワークアダプタがＯＳを介さずに主記憶の何れかの受信バッファにメッセージを書き込むシステムが提案されている。提案されたシステムでは、受信バッファはメッセージのヘッダに基づいて選択される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−１６７１４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、コンピュータ間でオブジェクトを送信する従来の方法では、受信側のコンピュータにおいて、ソフトウェアによりメッセージを解析しメッセージから各フィールドのデータを抽出してオブジェクトを復元する処理の負荷が大きくなりやすい。このため、最高速度の高い通信インタフェースを使用しても、ソフトウェアによるオブジェクトの組み立てがボトルネックとなってオブジェクトの送信速度が向上しないことがある。
【０００８】
一方、通信インタフェースの中には、メモリ上の不連続な複数の記憶領域にあるデータを結合してメッセージを生成・送信し、また、受信したメッセージを分割してメモリ上の不連続な複数の記憶領域に書き込むハードウェアを備えているものが存在する。このようなハードウェア処理は、ｓｃａｔｔｅｒ／ｇａｔｈｅｒＤＭＡ（Direct Memory Access）と呼ばれることがある。しかしながら、コンピュータ間では通常、構造の異なる複数の型のオブジェクトが送信される。そのため、従来は、受信したメッセージをどの様に分割しどの様にメモリに書き込めばよいかを通信インタフェースが画一的に判断できず、上記の通信インタフェースのハードウェア処理を活用することが難しかった。
【０００９】
１つの側面では、本発明は、通信インタフェースのハードウェア処理を活用してオブジェクトの送信を効率化することが可能なプログラム、情報処理装置およびオブジェクト送信方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、他のコンピュータと通信を行うコンピュータに実行させるプログラムが提供される。プログラムを実行するコンピュータは、それぞれが２以上のデータ項目を含む複数のオブジェクト型に対応する複数のコネクションを他のコンピュータとの間に確立する。送信するオブジェクトの型が複数のオブジェクト型の何れかに該当するとき、複数のコネクションの中からオブジェクトの型に対応するコネクションを選択し、選択したコネクションを用いてオブジェクトを他のコンピュータに送信する。
【００１１】
１つの態様では、通信インタフェースと制御部とを有する情報処理装置が提供される。通信インタフェースは、それぞれが２以上のデータ項目を含む複数のオブジェクト型に対応する複数のコネクションを他の情報処理装置との間に確立する。制御部は、送信するオブジェクトの型が複数のオブジェクト型の何れかに該当するとき、複数のコネクションの中からオブジェクトの型に対応するコネクションを選択し、選択したコネクションを用いてオブジェクトを他の情報処理装置に送信するように通信インタフェースを制御する。
【００１２】
１つの態様では、オブジェクト送信方法が提供される。オブジェクト送信方法では、第１の情報処理装置と第２の情報処理装置との間に、それぞれが２以上のデータ項目を含む複数のオブジェクト型に対応する複数のコネクションを確立する。送信するオブジェクトの型が複数のオブジェクト型の何れかに該当するとき、複数のコネクションのうちオブジェクトの型に対応するコネクションを用いて、オブジェクトを第１の情報処理装置から第２の情報処理装置に送信する。第２の情報処理装置が備えるオブジェクトを受信する通信インタフェースから第２の情報処理装置が備えるメモリに、オブジェクトを受信したコネクションに応じた方法でオブジェクトに含まれる２以上のデータ項目を配置する。
【発明の効果】
【００１３】
１つの側面では、通信インタフェースのハードウェア処理を活用してオブジェクトの送信を効率化することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】サーバ装置のハードウェア例を示すブロック図である。
【図４】サーバ装置の機能例を示すブロック図である。
【図５】オブジェクトからメッセージを生成する例を示す図である。
【図６】メッセージを分割してバッファに格納する例を示す図である。
【図７】コネクションテーブルとクレジットテーブルの例を示す図である。
【図８】ｓｃａｔｔｅｒリストの例を示す図である。
【図９】オブジェクト送信制御の手順例を示すフローチャートである。
【図１０】オブジェクト受信制御の手順例を示すフローチャートである。
【図１１】他のオブジェクト送信制御の手順例を示すフローチャートである。
【図１２】他のオブジェクト受信制御の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理システムを示す図である。第１の実施の形態の情報処理システムは、情報処理装置１０，２０を備える。情報処理装置１０，２０は、サーバコンピュータでもよいし、ユーザが操作するクライアントコンピュータでもよい。情報処理装置１０と情報処理装置２０とは、ネットワークを介して通信を行う。
【００１６】
情報処理装置１０，２０は、それぞれオブジェクトを扱うプログラムを実行する。プログラムのソースコードは、例えば、オブジェクト指向言語によって記述される。「オブジェクト」は、プログラムによって定義された型（例えば、クラス）に応じた構造をもち、２以上のデータ項目を含み得る。これら２以上のデータ項目は、型（整数型や浮動小数点型など）が異なってもよい。なお、「オブジェクト」は、オブジェクト指向のプログラムが扱う狭義のオブジェクトに限らず、構造体データであってもよい。第１の実施の形態では、情報処理装置１０から情報処理装置２０にオブジェクトを送信することを考える。
【００１７】
情報処理装置１０は、通信インタフェース１１および制御部１２を有する。通信インタフェース１１は、有線または無線でネットワークに接続するインタフェースであり、例えば、ＮＩＣ（Network Interface Card）である。制御部１２は、プロセッサを含み得る。「プロセッサ」は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）でもよいし、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの回路を含んでもよい。また、「プロセッサ」は、複数のプロセッサの集合（マルチプロセッサ）であってもよい。プロセッサは、例えば、ＲＡＭ（Random Access Memory）などのメモリに記憶されたプログラムを実行する。
【００１８】
通信インタフェース１１は、複数のオブジェクトの型に対応する複数のコネクションを情報処理装置２０との間に確立する。コネクションとしては、ＴＣＰ（Transmission Control Protocol）コネクションや、ＩｎｆｉｎｉＢａｎｄのＲＣ（Reliable Connection）を用いることができる。図１の例では、通信インタフェース１１は、型Ａに対応するコネクション３ａと、型Ｂに対応するコネクション３ｂと、型Ｃに対応するコネクション３ｃとを、情報処理装置２０との間に確立している。専用のコネクションを用意するオブジェクトの型は、情報処理装置１０から情報処理装置２０に送信され得るオブジェクトの型の一部であってもよい。その場合、送信され得るオブジェクトの型の中で相対的に送信頻度が高い型に対して専用のコネクションを用意することが好ましい。
【００１９】
制御部１２は、通信インタフェース１１を介したオブジェクトの送信を制御する。制御部１２は、送信するオブジェクトの型が専用のコネクションを用意した型であるとき、確立されている複数のコネクションの中からそのオブジェクトの型に対応するコネクションを選択する。そして、制御部１２は、選択したコネクションを用いてオブジェクトを送信するように通信インタフェース１１を制御する。例えば、型Ａのオブジェクト４ａはコネクション３ａを用いて送信し、型Ｂのオブジェクト４ｂはコネクション３ｂを用いて送信し、型Ｃのオブジェクト４ｃはコネクション３ｃを用いて送信する。
【００２０】
好ましくは、コネクション３ａでは型Ａ以外の型のオブジェクトは送信せず、コネクション３ｂでは型Ｂ以外の型のオブジェクトは送信せず、コネクション３ｃでは型Ｃ以外の型のオブジェクトは送信しない。送信するオブジェクトの型が専用のコネクションを用意していない型である場合、制御部１２は、例えば、コネクション３ａ，３ｂ，３ｃ以外のコネクションを用いてオブジェクトを送信するように通信インタフェース１１を制御する。特定のオブジェクトの型に対応付けられていない非専用のコネクションは、通信インタフェース１１が予め確立しておいてもよいし、送信時に動的に確立してもよい。
【００２１】
オブジェクトを送信するときは、オブジェクトがその型に応じた形式（フォーマット）のメッセージに変換される。例えば、オブジェクトに含まれる２以上のデータ項目が、オブジェクトの型に応じた順序で並べられる。複数の専用のコネクションが確立されているとき、送信されるメッセージの形式はコネクションに応じて異なると言うこともできる。オブジェクトの形式の変換は、制御部１２がソフトウェア処理として行うこともできるし（シリアライズ）、通信インタフェース１１がハードウェア処理として行ってもよい。後者のハードウェア処理は、例えば、通信インタフェース１１が備えるｓｃａｔｔｅｒ／ｇａｔｈｅｒＤＭＡ機能を利用して実現される。その場合、例えば、制御部１２から通信インタフェース１１に、各データ項目が記憶されているメモリ上の位置が通知される。
【００２２】
情報処理装置２０は、通信インタフェース２１およびメモリ２２を有する。通信インタフェース２１は、通信インタフェース１１と同様、有線または無線でネットワークに接続するインタフェースであり、例えば、ＮＩＣである。メモリ２２は、プログラムに従って処理されるデータを記憶するＲＡＭなどの記憶装置である。
【００２３】
通信インタフェース２１は、複数のオブジェクトの型に対応する複数のコネクションを情報処理装置１０との間に確立する。通信インタフェース２１は、情報処理装置１０からメッセージを受信すると、メッセージが受信されたコネクションを判定する。判定したコネクションが何れかのオブジェクトの型に対応する専用のコネクションであるとき、通信インタフェース２１は、判定したコネクションに応じた方法でメッセージからオブジェクトの各データ項目を抽出してメモリ２２に書き込む。データ項目は２以上抽出されることがあり、２以上のデータ項目はメモリ２２の不連続な記憶領域に書き込まれ得る。
【００２４】
上記の通信インタフェース２１のハードウェア処理は、例えば、通信インタフェース２１が備えるｓｃａｔｔｅｒ／ｇａｔｈｅｒＤＭＡ機能を利用して実現される。その場合、例えば、専用のコネクション毎に、メッセージの形式と抽出される各データ項目を書き込むべきメモリ２２上の位置とを示すフォーマット情報を、予め通信インタフェース２１に設定しておく。すると、通信インタフェース２１は、メッセージを受信したコネクションに対応するフォーマット情報に基づいて、メッセージから各データ項目を抽出してメモリ２２に書き込む。通信インタフェース２１のハードウェア処理を利用することで、オブジェクトの組み立て（デリシアライズ）をソフトウェア処理として行わなくてよい。
【００２５】
例えば、型Ａのオブジェクトに含まれる２以上のデータ項目の順序と、各データ項目の長さと、各データ項目を書き込むべきメモリ２２上の位置とを示すフォーマット情報を、コネクション３ａと対応付けて通信インタフェース２１に設定しておく。同様に、型Ｂについてのフォーマット情報を、コネクション３ｂと対応付けて通信インタフェース２１に設定し、型Ｃについてのフォーマット情報を、コネクション３ｃと対応付けて通信インタフェース２１に設定しておく。オブジェクトの構造（すなわち、メッセージの構造）が型Ａ，Ｂ，Ｃの間で異なっても、通信インタフェース２１は、メッセージを受信したコネクションに対応するフォーマット情報を参照することでメッセージを適切に処理できる。
【００２６】
なお、メッセージを受信したコネクションが特定のオブジェクトの型に対応する専用のコネクションでない場合、通信インタフェース２１は、例えば、受信したメッセージをストリームとしてそのままメモリ２２に書き込む。すると、ソフトウェア処理としてのデシリアライズによってメッセージが解析され、メッセージからデータ項目が抽出されてオブジェクトが復元される。ただし、メッセージの受信からオブジェクトの復元までの間に、メモリ２２上ではメッセージやデータ項目のコピーが複数回発生することになる。
【００２７】
第１の実施の形態の情報処理システムによれば、複数のオブジェクトの型に対応する複数のコネクションが情報処理装置１０と情報処理装置２０との間に確立される。そして、送信するオブジェクトの型に応じて複数のコネクションが使い分けられる。よって、情報処理装置２０の通信インタフェース２１は、メッセージを受信したコネクションに応じた方法で当該メッセージを処理することで、メッセージからオブジェクトの各データ項目を適切に抽出してメモリ２２に書き込むことが可能となる。これにより、通信インタフェース２１のハードウェア処理を活用して情報処理装置２０のソフトウェア処理の負荷を軽減することができ、情報処理装置１０，２０の間のオブジェクト送信を効率化できる。
【００２８】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、クライアント装置３０、ネットワーク４１およびサーバ装置１００，２００を含む。クライアント装置３０とサーバ装置１００，２００はネットワーク４１に接続されている。ネットワーク４１は、例えば、ＬＡＮ（Local Area Network）である。
【００２９】
クライアント装置３０は、ユーザが操作する端末装置としてのコンピュータである。クライアント装置３０は、ユーザ操作に応じて、サーバ装置１００，２００に所望の情報処理を実行させる。例えば、クライアント装置３０は、アプリケーションプログラムの実行を開始するコマンドや終了するコマンドをサーバ装置１００，２００に送信する。
【００３０】
サーバ装置１００，２００は、オブジェクト指向言語を用いて作成されたアプリケーションプログラムを実行するサーバコンピュータである。サーバ装置１００，２００では、それぞれＯＳが動作しており、アプリケーションプログラムを実行するための基盤となるライブラリやフレームワークなどのミドルウェアがＯＳ上で動作している。サーバ装置１００とサーバ装置２００で並列にアプリケーションプログラムが実行され、これに伴ってサーバ装置１００，２００の間でオブジェクトが送信され得る。オブジェクト送信の詳細な手続きは、ミドルウェアやＯＳによって制御される。
【００３１】
第２の実施の形態では、主にサーバ装置１００からサーバ装置２００にオブジェクトを送信する場合を考える。サーバ装置１００は第１の実施の形態の情報処理装置１０の一例であり、サーバ装置２００は第１の実施の形態の情報処理装置２０の一例である。
【００３２】
図３は、サーバ装置のハードウェア例を示すブロック図である。サーバ装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ（Hard Disk Drive）１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６およびＮＩＣ１１０を有する。
【００３３】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、サーバ装置２００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００３４】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムや情報処理に用いられるデータを一時的に記憶する揮発性メモリである。なお、サーバ装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数の種類のメモリを備えてもよい。
【００３５】
ＨＤＤ１０３は、ＯＳやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性記憶装置である。なお、サーバ装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を備えてもよく、複数の種類の不揮発性記憶装置を備えてもよい。
【００３６】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、サーバ装置１００に接続されたディスプレイ４２に画像を出力する。ディスプレイ４２としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬＤ：Organic Electro-Luminescence）ディスプレイなど各種のディスプレイを用いることができる。
【００３７】
入力信号処理部１０５は、サーバ装置１００に接続された入力デバイス４３から入力信号を取得し、ＣＰＵ１０１に通知する。入力デバイス４３としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなど各種の入力デバイスを用いることができる。また、サーバ装置１００には複数の種類の入力デバイスが接続されてもよい。
【００３８】
ディスクドライブ１０６は、記録媒体４４に記録されたプログラムやデータを読み取る駆動装置である。記録媒体４４として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、例えば、ＣＰＵ１０１からの命令に従って、記録媒体４４から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３９】
ＮＩＣ１１０は、ネットワーク４１を介してクライアント装置３０やサーバ装置２００と通信を行う通信インタフェースである。ＮＩＣ１１０は、ケーブルが接続される有線インタフェースでもよいし、アクセスポイントに接続する無線インタフェースでもよい。
【００４０】
ただし、サーバ装置１００はディスクドライブ１０６を備えなくてもよく、専らクライアント装置３０などの端末装置からアクセスされる場合には画像信号処理部１０４や入力信号処理部１０５を備えなくてもよい。また、ディスプレイ４２や入力デバイス４３は、サーバ装置１００の筐体と一体に形成されてもよい。クライアント装置３０やサーバ装置２００も、サーバ装置１００と同様のハードウェアによって実現できる。
【００４１】
なお、ＮＩＣ１１０は第１の実施の形態の通信インタフェース１１の一例であり、ＣＰＵ１０１は第１の実施の形態の制御部１２の一例である。また、サーバ装置２００が備えるＮＩＣは第１の実施の形態の通信インタフェース２１の一例であり、サーバ装置２００が備えるＲＡＭは第１の実施の形態のメモリ２２の一例である。
【００４２】
図４は、サーバ装置の機能例を示すブロック図である。
サーバ装置１００は、前述のように、ＮＩＣ１１０を有する。また、サーバ装置１００は、通信制御部１２１、制御情報記憶部１２２、データ処理部１３１およびオブジェクト記憶部１３２を有する。通信制御部１２１およびデータ処理部１３１は、例えば、ソフトウェアのモジュールとして実現される。制御情報記憶部１２２およびオブジェクト記憶部１３２は、例えば、ＲＡＭ１０２に確保した記憶領域として実現される。
【００４３】
ＮＩＣ１１０は、送受信部１１１、メモリ１１２およびＤＭＡコントローラ１１３を有する。ＮＩＣ１１０の上記ユニットはハードウェアとして実現できる。
送受信部１１１は、ネットワーク４１を介してサーバ装置２００にメッセージを送信し、また、ネットワーク４１を介してサーバ装置２００からメッセージを受信する。メッセージを送信するにあたり、送受信部１１１は、通信制御部１２１からの指示に応じてサーバ装置２００との間にコネクションを確立する。コネクションは、ネットワーク４１上に形成する論理的な通信経路であり、例えば、ＴＣＰコネクションやＩｎｆｉｎｉＢａｎｄのＲＣである。送受信部１１１は、サーバ装置２００との間に複数のコネクションを確立できる。複数のコネクションは、ＴＣＰポート番号などのコネクション番号によって識別される。メッセージの送信に用いるコネクションは通信制御部１２１から指定される。
【００４４】
メモリ１１２は、ＲＡＭなどの揮発性メモリであり、通信制御部１２１から受け付けるｇａｔｈｅｒリストを記憶する。ただし、メモリ１１２は不揮発性メモリであってもよい。ｇａｔｈｅｒリストは、送信するメッセージに含める複数のフィールドとそれらフィールドのメッセージ内での順序を示す。ｇａｔｈｅｒリストは、各フィールドのデータが記憶されたオブジェクト記憶部１３２上の位置と当該フィールドの長さの情報を含む。
【００４５】
ＤＭＡコントローラ１１３は、通信制御部１２１からの指示に応じてメッセージを送受信部１１１に送信させ、また、送受信部１１１が受信したメッセージを処理する。ＤＭＡコントローラ１１３は、ネットワーク４１に出力するストリーム形式のメッセージを通信制御部１２１から取得すると、当該メッセージを送受信部１１１に送信させる。一方、ＤＭＡコントローラ１１３は、通信制御部１２１からｇａｔｈｅｒリストを指定したメッセージ送信要求を受け付けると、ハードウェア処理によりオブジェクト記憶部１３２に直接アクセスする。そして、ＤＭＡコントローラ１１３は、ｇａｔｈｅｒリストに従って複数のフィールドのデータを取得し、メッセージを組み立てて送受信部１１１に送信させる。
【００４６】
通信制御部１２１は、ＮＩＣ１１０を用いた通信を制御する。通信制御部１２１は、例えば、オブジェクト指向プログラムを実行するためのライブラリの中の通信用モジュールとして実装できる。その場合、通信制御部１２１は、ＯＳのＡＰＩ（Application Programming Interface）を呼び出すことで、ＯＳを介してＮＩＣ１１０にアクセスする。
【００４７】
サーバ装置１００からサーバ装置２００にオブジェクトを送信し始める前に、通信制御部１２１は、送信され得るオブジェクトの型（例えば、クラス）のうち２以上の型それぞれに対して、専用のコネクションをＮＩＣ１１０に確立させる。通信制御部１２１は、データ処理部１３１からオブジェクト送信要求を受け付けると、送信するオブジェクトの型が専用のコネクションを用意した型であるか判定する。専用のコネクションを用意した型でない場合、通信制御部１２１は、オブジェクト記憶部１３２から複数のフィールドのデータを取得してメッセージを生成し、ＯＳを介してＮＩＣ１１０にメッセージを渡す。一方、専用のコネクションを用意した型である場合、通信制御部１２１は、ＮＩＣ１１０のＤＭＡ機能を利用してＮＩＣ１１０にメッセージを組み立てさせる。すなわち、通信制御部１２１は、メッセージに代えてｇａｔｈｅｒリストを生成してＮＩＣ１１０に渡す。
【００４８】
制御情報記憶部１２２は、通信制御部１２１がオブジェクト送信を制御するために参照する制御情報を記憶する。制御情報記憶部１２２は、例えば、オブジェクト指向プログラムを実行するためのライブラリから使用される記憶領域である。制御情報には、オブジェクトの型とコネクションとの対応関係を示すコネクション情報や、オブジェクトを受信するサーバ装置２００側でのバッファの空き状況を示すクレジット情報が含まれる。
【００４９】
データ処理部１３１は、オブジェクト記憶部１３２上にオブジェクトを生成してデータ処理を行う。データ処理部１３１は、例えば、クライアント装置３０からの指示に応じて実行されるアプリケーションプログラムとして実装される。データ処理部１３１は、サーバ装置２００にオブジェクトを送信するとき、通信制御部１２１にオブジェクトの送信を要求する。オブジェクトを送信するとき、データ処理部１３１は、送信制御のために一時的に用いられるパラメータをフィールドとしてオブジェクトに挿入することがある。
【００５０】
オブジェクト記憶部１３２は、オブジェクト指向プログラムにおいて定義されたオブジェクトの型（例えば、クラス）に応じた構造をもつオブジェクトを記憶する。オブジェクト記憶部１３２は、例えば、アプリケーションプログラムから使用されるユーザ記憶領域である。オブジェクト記憶部１３２上では、１つのオブジェクトに含まれる複数のフィールドのデータが、不連続な複数の記憶領域に分散して記憶されていることがある。
【００５１】
なお、通信制御部１２１と制御情報記憶部１２２は、アプリケーションプログラムに対して通信機能を提供する通信層に属すると言うことができる。データ処理部１３１とオブジェクト記憶部１３２は、アプリケーション層に属すると言うことができる。
【００５２】
また、上記ではＮＩＣ１１０がＤＭＡコントローラ１１３を有すると説明したが、ＮＩＣ１１０が複数のＤＭＡコントローラを有してもよい。１つのＤＭＡコントローラが２以上のコネクションまたは２以上のｇａｔｈｅｒリストを担当してもよいし、１つのＤＭＡコントローラが１つのコネクションまたは１つのｇａｔｈｅｒリストのみを担当してもよい。前者の場合、例えば、各ＤＭＡコントローラが、メッセージを送信する毎に、使用するｇａｔｈｅｒリストを選択すればよい。後者の場合、例えば、通信制語部１２１からの指示に応じて使用するｇａｔｈｅｒリストが事前に特定されることで、各ＤＭＡコントローラはメッセージを送信する毎にｇａｔｈｅｒリストを選択しなくてもよい。
【００５３】
サーバ装置２００は、ＮＩＣ２１０を有する。また、サーバ装置２００は、通信制御部２２１、制御情報記憶部２２２、データ処理部２３１およびオブジェクト記憶部２３２を有する。通信制御部２２１およびデータ処理部２３１は、例えば、ソフトウェアのモジュールとして実現される。制御情報記憶部２２２およびオブジェクト記憶部２３２は、例えば、ＲＡＭに確保した記憶領域として実現される。サーバ装置２００の上記ユニットは、サーバ装置１００のＮＩＣ１１０、通信制御部１２１、制御情報記憶部１２２、データ処理部１３１およびオブジェクト記憶部１３２に対応する。
【００５４】
ＮＩＣ２１０は、送受信部２１１、メモリ２１２およびＤＭＡコントローラ２１３を有する。ＮＩＣ２１０の上記ユニットは、ハードウェアとして実現でき、ＮＩＣ１１０の送受信部１１１、メモリ１１２およびＤＭＡコントローラ１１３に対応する。
【００５５】
送受信部２１１は、ネットワーク４１を介してサーバ装置１００からメッセージを受信し、また、ネットワーク４１を介してサーバ装置１００にメッセージを送信する。
メモリ２１２は、ＲＡＭなどの揮発性メモリであり、コネクションに対応付けて通信制御部２２１から受け付けるｓｃａｔｔｅｒリストを記憶する。ただし、メモリ２１２は不揮発性メモリであってもよい。ｓｃａｔｔｅｒリストは、あるコネクションで受信するメッセージに含まれる複数のフィールドとそれらフィールドのメッセージ内での順序を示す。ｓｃａｔｔｅｒリストは、各フィールドのデータが書き込まれるべきオブジェクト記憶部２３２上の位置と当該フィールドの長さの情報を含む。なお、上記の専用のコネクション１つに対して、メッセージ複数個分のバッファを用意するため、オブジェクト記憶部２３２上の指し示す位置が異なる複数のｓｃａｔｔｅｒリストが用意される。
【００５６】
ＤＭＡコントローラ２１３は、送受信部２１１が受信したメッセージを処理し、また、通信制御部２２１からの指示に応じてメッセージを送受信部２１１に送信させる。ＤＭＡコントローラ２１３は、送受信部２１１がメッセージを受信すると、メッセージが受信されたコネクションに対応するｓｃａｔｔｅｒリストをメモリ２１２から取得することを試みる。ｓｃａｔｔｅｒリストが存在しない場合、ＤＭＡコントローラ２１３は、受信されたメッセージを通信制御部２２１に渡す。一方、ｓｃａｔｔｅｒリストが存在する場合、ＤＭＡコントローラ２１３は、ハードウェア処理によって、メッセージから複数のフィールドのデータを抽出しオブジェクト記憶部２３２に直接書き込む。
【００５７】
通信制御部２２１は、ＮＩＣ２１０を用いた通信を制御する。通信制御部２２１は、例えば、オブジェクト指向プログラムを実行するためのライブラリの中の通信用モジュールとして実装できる。通信制御部２２１は、ＮＩＣ２１０からＯＳを介してストリーム形式のメッセージを受け取ると、メッセージから複数のフィールドのデータを抽出し、オブジェクト記憶部２３２上にオブジェクトを再現する。一方、ＤＭＡ機能によってメッセージを処理した旨の通知をＮＩＣ２１０から受け取ると、通信制御部２２１は、データが書き込まれたオブジェクト記憶部２３２上のバッファをデータ処理部２３１に通知する。
【００５８】
制御情報記憶部２２２は、通信制御部２２１がオブジェクト受信を制御するために参照する制御情報を記憶する。制御情報記憶部２２２は、例えば、オブジェクト指向プログラムを実行するためのライブラリから使用される記憶領域である。制御情報には、オブジェクトの型とコネクションとの対応関係を示すコネクション情報や、オブジェクトの型に対応するＮＩＣ２１０に設定すべきｓｃａｔｔｅｒリストが含まれる。
【００５９】
データ処理部２３１は、サーバ装置１００から受信されたオブジェクトのデータがオブジェクト記憶部２３２に書き込まれると、そのデータを処理する。オブジェクト記憶部２３２に書き込まれるデータの一部は、サーバ装置１００からオブジェクトを受け取るために一時的に用いられるパラメータである。データ処理部２３１は、あるバッファに書き込まれたデータが不要になると、空いたバッファを通信制御部２２１に通知する。
【００６０】
オブジェクト記憶部２３２は、オブジェクト指向プログラムにおいて定義されたオブジェクトの型（例えば、クラス）に応じた構造をもつオブジェクトを記憶する。オブジェクト記憶部２３２には、専用のコネクションを用意したオブジェクトの型と対応付けて、オブジェクトに含まれるフィールドのデータを一時的に記憶するバッファを列挙したテーブルが設けられる。テーブルに含まれる複数のバッファを使い回すことで、メッセージが受信される毎にオブジェクトの記憶領域を動的に確保しなくてもよく、また、不要な記憶領域を自動的に解放する処理（ガーベッジコレクション）の負担が軽減される。
【００６１】
なお、通信制御部２２１と制御情報記憶部２２２は、アプリケーションプログラムに対して通信機能を提供する通信層に属すると言うことができる。データ処理部２３１とオブジェクト記憶部２３２は、アプリケーション層に属すると言うことができる。
【００６２】
また、上記ではＮＩＣ２１０がＤＭＡコントローラ２１３を有すると説明したが、ＮＩＣ２１０が複数のＤＭＡコントローラを有してもよい。１つのＤＭＡコントローラが２以上のコネクションまたは２以上のｓｃａｔｔｅｒリストを担当してもよいし、１つのＤＭＡコントローラが１つのコネクションまたは１つのｓｃａｔｔｅｒリストのみを担当してもよい。前者の場合、例えば、各ＤＭＡコントローラが、メッセージを受信する毎に、使用するｓｃａｔｔｅｒリストを選択すればよい。後者の場合、例えば、通信制語部２２１からの指示に応じて使用するｓｃａｔｔｅｒリストが事前に特定されることで、各ＤＭＡコントローラはメッセージを受信する毎にｓｃａｔｔｅｒリストを選択しなくてもよい。
【００６３】
図５は、オブジェクトからメッセージを生成する例を示す図である。ここでは、５個のフィールド（フィールドＡ−１〜Ａ−５）を含むオブジェクトの型Ａと、４個のフィールド（フィールドＢ−１〜Ｂ−４）を含むオブジェクトの型Ｂが定義されているとする。
【００６４】
サーバ装置１００のオブジェクト記憶部１３２には、型Ａのオブジェクトに含まれるフィールドＡ−１〜Ａ−５のデータが、不連続な複数の記憶領域に分散して記憶されている可能性がある。サーバ装置１００がサーバ装置２００に型Ａのオブジェクトを送信するときは、オブジェクト記憶部１３２上で分散しているフィールドＡ−１〜Ａ−５のデータが所定の順序で結合されることで、型Ａに対応するメッセージが生成される。例えば、フィールドＡ−１，Ａ−２，Ａ−３，Ａ−４，Ａ−５の順にデータが並べられる。
【００６５】
同様に、サーバ装置１００のオブジェクト記憶部１３２には、型Ｂのオブジェクトに含まれるフィールドＢ−１〜Ｂ−４のデータが、不連続な複数の記憶領域に分散して記憶されている可能性がある。サーバ装置１００がサーバ装置２００に型Ｂのオブジェクトを送信するときは、オブジェクト記憶部１３２上で分散しているフィールドＢ−１〜Ｂ−４のデータが所定の順序で結合されることで、型Ｂに対応するメッセージが生成される。例えば、フィールドＢ−１，Ｂ−２，Ｂ−３，Ｂ−４の順にデータが並べられる。
【００６６】
図６は、メッセージを分割してバッファに格納する例を示す図である。
前述のように、専用のコネクションが用意されたオブジェクトの型それぞれに対して、複数のバッファを列挙したテーブルがサーバ装置２００のオブジェクト記憶部２３２上に形成される。オブジェクトの型１つ当たりのバッファ数は、予想されるサーバ装置１００，２００の間の通信量に応じて予め決めておいてもよい。例えば、バッファ数を数十から数百程度に設定しておく。１つのオブジェクトの型に対応するテーブルは、フィールドに応じて複数に分割されて不連続な複数の記憶領域に分散して記憶されてもよい。
【００６７】
例えば、図６の例では、型ＡのフィールドＡ−１，Ａ−２のデータを記憶するテーブルと、フィールドＡ−３，Ａ−４のデータを記憶するテーブルと、フィールドＡ−５のデータを記憶するテーブルとが、オブジェクト記憶部２３２に形成されている。また、型ＢのフィールドＢ−１，Ｂ−２，Ｂ−３のデータを記憶するテーブルと、フィールドＢ−４のデータを記憶するテーブルとが、オブジェクト記憶部２３２に形成されている。
【００６８】
ＮＩＣ２１０は、専用のコネクションでメッセージを受信すると、テーブルに含まれる複数のバッファ（複数の行）のうち空いているバッファの中の各フィールドに相当する位置（列）に、メッセージから抽出したデータを書き込む。例えば、型Ａに対応するコネクションで受信したメッセージから、フィールドＡ−１〜Ａ−５のデータが抽出される。そして、型Ａに対応するテーブル内の何れかのバッファ（例えば、バッファ＃１）の中の各フィールドに相当する位置に、抽出されたデータが書き込まれる。同様に、型Ｂに対応するコネクションで受信したメッセージから、フィールドＢ−１〜Ｂ−４のデータが抽出される。そして、型Ｂに対応するテーブル内の何れかのバッファ（例えば、バッファ＃０）の中の各フィールドに相当する位置に、抽出されたデータが書き込まれる。
【００６９】
ここで、複数のフィールドのデータの中には、オブジェクト送信のために一時的に使用されるパラメータとしての非永続データと、オブジェクト送信の完了後もデータ処理のために引き続き使用される永続データが含まれる。図６の例では、型ＡのフィールドＡ−１〜Ａ−４は非永続データを設定するフィールドであり、フィールドＡ５は永続データを設定するフィールドである。また、型ＢのフィールドＢ−１〜Ｂ−３は非永続データを設定するフィールドであり、フィールドＢ４は永続データを設定するフィールドである。
【００７０】
第２の実施の形態では、永続データは、テーブル内のバッファに一旦書き込まれた後、オブジェクト記憶部２３２に動的に確保される記憶領域にコピーされる。永続データのコピーは、例えば、通信制御部２２１（または、データ処理部２３１）によってソフトウェア処理として実行される。ただし、ＮＩＣ２１０に、永続データをテーブル内のバッファに書き込ませず、メッセージ毎に動的に確保する記憶領域に直接書き込ませてもよい。これにより、ソフトウェア処理による永続データのコピーを抑制することができる。
【００７１】
図７は、コネクションテーブルとクレジットテーブルの例を示す図である。コネクションテーブル１２３およびクレジットテーブル１２４は、サーバ装置１００の制御情報記憶部１２２に記憶されている。また、コネクションテーブル１２３と同様のテーブルが、サーバ装置２００の制御情報記憶部２２２に記憶されている。
【００７２】
コネクションテーブル１２３は、オブジェクト型およびコネクションの項目を含む。オブジェクト型の項目には、オブジェクトの型の名称が登録される。コネクションの項目には、オブジェクトの型に対応するコネクションの識別番号（例えば、ＴＣＰポート番号やＩｎｆｉｎｉＢａｎｄのＲＣ番号）が登録される。なお、専用のコネクションを用意しない型のオブジェクトは、予め確立された既定（デフォルト）のコネクションで送信してもよいし、送信時に動的に確立するコネクションで送信してもよい。前者の場合、例えば、既定のコネクションの識別番号をコネクションテーブル１２３に登録しておく。
【００７３】
クレジットテーブル１２４は、オブジェクト型およびクレジット数の項目を含む。オブジェクト型の項目には、専用のコネクションを用意したオブジェクトの型の名称が登録される。クレジット数の項目には、サーバ装置１００がサーバ装置２００にオブジェクトを送信できる権利（クレジット）の残り数が登録される。クレジット数の初期値は、好ましくは、オブジェクトの型に対応付けてオブジェクト記憶部２３２に用意されたバッファの数である。サーバ装置１００は、クレジットを消費して（クレジット数を減少させて）サーバ装置２００にオブジェクトを送信する。サーバ装置２００側でバッファに空きができると、サーバ装置１００にクレジットが１つ付与される（クレジット数が増加する）。すなわち、クレジットによってバッファの空き状況が管理される。
【００７４】
図８は、ｓｃａｔｔｅｒリストの例を示す図である。サーバ装置２００が備えるＮＩＣ２１０のメモリ２１２には、通信制御部２２１によって、特定のオブジェクトの型に対応する専用のコネクション１つに対して複数のｓｃａｔｔｅｒリストが登録される。
【００７５】
ｓｃａｔｔｅｒリストは、複数のフィールドそれぞれについてのポインタとデータ長の組を、これらのフィールドがメッセージに含まれる順序と一致するように列挙する。ポインタは、オブジェクト記憶部２３２内のデータを書き込むべき記憶領域の先頭位置を指し示す物理アドレスである。オブジェクトの型に対応して設けられたテーブル内のバッファ１つに対して、１つのｓｃａｔｔｅｒリストが登録されることになる。
【００７６】
例えば、型Ａのバッファ＃０に対応するｓｃａｔｔｅｒリストは、次の５つのレコードを順に列挙する。（１）バッファ＃０内のフィールドＡ−１のデータを書き込む記憶領域の先頭位置とフィールドＡ−１のデータ長。（２）バッファ＃０内のフィールドＡ−２のデータを書き込む記憶領域の先頭位置とフィールドＡ−２のデータ長。（３）バッファ＃０内のフィールドＡ−３のデータを書き込む記憶領域の先頭位置とフィールドＡ−３のデータ長。（４）バッファ＃０内のフィールドＡ−４のデータを書き込む記憶領域の先頭位置とフィールドＡ−４のデータ長。（５）バッファ＃０内のフィールドＡ−５のデータを書き込む記憶領域の先頭位置とフィールドＡ−５のデータ長。型Ａの他のバッファに対応するｓｃａｔｔｅｒリストは、ポインタがバッファ＃０のものとは異なる。
【００７７】
また、例えば、型Ｂのバッファ＃０に対応するｓｃａｔｔｅｒリストは、次の４つのレコードを順に列挙する。（１）バッファ＃０内のフィールドＢ−１のデータを書き込む記憶領域の先頭位置とフィールドＢ−１のデータ長。（２）バッファ＃０内のフィールドＢ−２のデータを書き込む記憶領域の先頭位置とフィールドＢ−２のデータ長。（３）バッファ＃０内のフィールドＢ−３のデータを書き込む記憶領域の先頭位置とフィールドＢ−３のデータ長。（４）バッファ＃０内のフィールドＢ−４のデータを書き込む記憶領域の先頭位置とフィールドＢ−４のデータ長。型Ｂの他のバッファに対応するｓｃａｔｔｅｒリストは、ポインタがバッファ＃０のものとは異なる。
【００７８】
最初に通信制御部２２１からＮＩＣ２１０に、専用のコネクション毎にバッファ数に相当する数のｓｃａｔｔｅｒリストが渡される。ＮＩＣ２１０は、コネクション毎に複数のｓｃａｔｔｅｒリストを順序付けて管理する。例えば、複数のｓｃａｔｔｅｒリストがＦＩＦＯ（First In First Out）構造として管理される。ある専用のコネクションでメッセージを受信すると、ＮＩＣ２１０は、当該コネクションに対応する複数のｓｃａｔｔｅｒリストの中から先頭１つを選択し、選択したｓｃａｔｔｅｒリストが示すバッファに各フィールドのデータを書き込む。このとき、ＮＩＣ２１０は、選択したｓｃａｔｔｅｒリストを破棄する。空きバッファができると、空きバッファに対応するｓｃａｔｔｅｒリストが通信制御部２２１からＮＩＣ２１０に渡されてＦＩＦＯ構造の末尾に追加される。
【００７９】
このようにして、テーブルに含まれる複数のバッファが使い回される。このため、テーブルの記憶領域は、ガーベッジコレクションによっては解放されない。
オブジェクトを送信するときに通信制御部１２１からＮＩＣ１１０に渡されるｇａｔｈｅｒリストも、ｓｃａｔｔｅｒリストと同様のデータ構造をもつ。ｇａｔｈｅｒリストのポインタは、メッセージに挿入するフィールドのデータが記憶された記憶領域を指す。
【００８０】
なお、通信制御部１２１が呼び出すＯＳのＡＰＩは、例えば、次のように定義される。
ｉｎｔ  ｓｅｎｄ（ｉｎｔ  ｆｄ，  ｓｔｒｕｃｔ  ｂｕｆ  ｓｂｕｆ）；
ｉｎｔ  ｍｓｅｎｄ（ｉｎｔ  ｆｄ，  ｓｔｒｕｃｔ  ｂｕｆ［］  ｇＬｉｓｔ）；
上記の構造体ｂｕｆは、記憶領域の先頭アドレスとデータ長の組である。関数ｓｅｎｄは、１つの連続した記憶領域のデータを送信するための関数であり、コネクションと構造体ｂｕｆを引数にとる。関数ｍｓｅｎｄは、複数の不連続な記憶領域のデータを結合して送信するための関数であり、コネクションと構造体ｂｕｆの配列を引数にとる。引数として指定した構造体ｂｕｆの配列がｇａｔｈｅｒリストに相当する。
【００８１】
また、通信制御部２２１が呼び出すＯＳのＡＰＩは、例えば、次のように定義される。
ｉｎｔ  ｒｅｃｖ（ｉｎｔ  ｆｄ，  ｓｔｒｕｃｔ  ｂｕｆ  ｒｂｕｆ）；
ｉｎｔ  ｍｒｅｃｖ（ｉｎｔ  ｆｄ，  ｓｔｒｕｃｔ  ｂｕｆ［］  ｓＬｉｓｔ）；
関数ｒｅｃｖは、受信されたデータを１つの連続した記憶領域に書き込むよう指示するための関数であり、コネクションと構造体ｂｕｆを引数にとる。関数ｍｒｅｃｖは、受信されたデータを分割して複数の不連続な記憶領域に書き込むよう指示するための関数であり、コネクションと構造体ｂｕｆの配列を引数にとる。引数として指定した構造体ｂｕｆの配列がｓｃａｔｔｅｒリストに相当する。
【００８２】
図９は、オブジェクト送信制御の手順例を示すフローチャートである。
（Ｓ１１）通信制御部１２１は、制御情報記憶部１２２に記憶されたコネクションテーブル１２３に従って、ＮＩＣ１１０にコネクション確立を指示する。ＮＩＣ１１０の送受信部１１１は、通信制御部１２１から指示された数のコネクションをサーバ装置２００との間に確立する。なお、第２の実施の形態では、専用のコネクションを用意するオブジェクトの型は予めユーザによって設定されているものとする。各オブジェクトの型に対応するコネクションの識別番号は、予めユーザが設定してもよいし、空いている識別番号の中から自動的に選択してもよい。後者の場合、コネクションが確立された後に、通信制御部１２１がコネクションテーブル１２３に識別番号を登録すればよい。
【００８３】
（Ｓ１２）通信制御部１２１は、サーバ装置２００からＮＩＣ１１０を介して、オブジェクトの型毎の初期クレジット数を示すメッセージを取得する。通信制御部１２１は、制御情報記憶部１２２に記憶されたクレジットテーブル１２４にクレジット数を登録する。
【００８４】
（Ｓ１３）通信制御部１２１は、データ処理部１３１からオブジェクト送信要求を受け付けたか判断する。オブジェクト送信要求を受け付けた場合は処理をＳ１６に進め、オブジェクト送信要求を受け付けていない場合は処理をＳ１４に進める。
【００８５】
（Ｓ１４）通信制御部１２１は、サーバ装置２００からＮＩＣ１１０を介して、何れかのオブジェクトの型に対応するクレジットが付与されたことを示すメッセージを取得したか判断する。クレジットを示すメッセージを取得した場合は処理をＳ２４に進め、クレジットを示すメッセージを取得していない場合は処理をＳ１５に進める。
【００８６】
（Ｓ１５）通信制御部１２１は、サーバ装置１００とサーバ装置２００の間のオブジェクト通信を終了するか判断する。オブジェクト通信が終了する契機としては、例えば、アプリケーションプログラムの停止を示すコマンドがユーザから入力された場合が挙げられる。オブジェクト通信を終了しない場合は処理をＳ１３に進め、オブジェクト通信を終了する場合は図９のオブジェクト送信制御を停止する。
【００８７】
（Ｓ１６）通信制御部１２１は、データ処理部１３１から指定されたオブジェクトの型が、コネクションテーブル１２３に登録された型であるか判断する。登録された型である場合は処理をＳ１８に進め、登録された型でない場合は処理をＳ１７に進める。
【００８８】
（Ｓ１７）通信制御部１２１は、オブジェクトをソフトウェア処理によってシリアライズする。すなわち、通信制御部１２１は、オブジェクト記憶部１３２から複数のフィールドのデータを読み出して所定の順序で結合することでメッセージを生成する。このとき、ＲＡＭ１０２上の通信制御部１２１が使用する記憶領域にはシリアライズされたメッセージが一時的に記憶され得る。そして、通信制御部１２１は、特定のオブジェクトの型専用でないコネクション（例えば、既定のコネクション）を指定し、ＯＳのＡＰＩを介してＮＩＣ１１０にメッセージを送信させる。なお、ＲＡＭ１０２上のＯＳが使用する記憶領域にメッセージが一時的にコピーされ得る。そして、処理がＳ１３に進められる。
【００８９】
（Ｓ１８）通信制御部１２１は、データ処理部１３１から指定されたオブジェクトの型に対応するクレジット数を、クレジットテーブル１２４から取得する。そして、通信制御部１２１は、オブジェクトを送信するためのクレジットが残っているか、すなわち、クレジット数が１以上あるか判断する。クレジットが残っている場合は処理をＳ２０に進め、クレジットが残っていない場合は処理をＳ１９に進める。
【００９０】
（Ｓ１９）通信制御部１２１は、データ処理部１３１から指定されたオブジェクトの送信を制限する。例えば、通信制御部１２１は、クレジット数が１以上になるまでそのオブジェクトの送信を保留する。または、通信制御部１２１は、オブジェクト送信要求への応答としてデータ処理部１３１に送信失敗を通知する。そして、処理をＳ１３に進める。
【００９１】
（Ｓ２０）通信制御部１２１は、データ処理部１３１から指定されたオブジェクトに対応するｇａｔｈｅｒリストを生成する。ｇａｔｈｅｒリストのポインタとしては、指定されたオブジェクトに含まれるフィールドのデータを指し示す物理アドレスを用いる。
【００９２】
（Ｓ２１）通信制御部１２１は、コネクションテーブル１２３を参照して、データ処理部１３１から指定されたオブジェクトの型に対応するコネクションを選択する。
（Ｓ２２）通信制御部１２１は、クレジットテーブル１２４に登録された、データ処理部１３１から指定されたオブジェクトの型のクレジット数を１だけ減らす。
【００９３】
なお、上記Ｓ２０〜Ｓ２２の処理は任意の順序で実行することが可能である。
（Ｓ２３）通信制御部１２１は、Ｓ２１で選択したコネクションの識別番号とＳ２０で生成したｇａｔｈｅｒリストとを、ＯＳを介してＮＩＣ１１０に渡す。ＮＩＣ１１０のＤＭＡコントローラ１１３は、ｇａｔｈｅｒリストに従ってオブジェクト記憶部１３２から複数のフィールドのデータを取得してメッセージを生成する。ＮＩＣ１１０の送受信部１１１は、通信制御部１２１から指定されたコネクションを用いて生成されたメッセージをサーバ装置２００に送信する。そして、処理をＳ１３に進める。
【００９４】
（Ｓ２４）通信制御部１２１は、クレジットテーブル１２４に登録された、指定されたオブジェクトの型のクレジット数を１だけ増やす。そして、処理をＳ１３に進める。
図１０は、オブジェクト受信制御の手順例を示すフローチャートである。
【００９５】
（Ｓ３１）通信制御部２２１は、サーバ装置１００からの要求に応じて、複数のオブジェクトの型に対応する複数のコネクションを確立するようＮＩＣ２１０を制御する。ＮＩＣ２１０の送受信部２１１は、通信制御部２２１の制御のもとサーバ装置１００との間にコネクションを確立する。なお、通信制御部２２１は、コネクションが確立された後、制御情報記憶部２２２に記憶されたコネクションテーブルに識別番号を登録してもよい。
【００９６】
（Ｓ３２）通信制御部２２１は、オブジェクト記憶部２３２に、専用のコネクションを用意したオブジェクトの型に対応するテーブル構造のバッファ領域を確保する。１つのオブジェクトの型に対して、所定数（例えば、数十から数百）のバッファが用意される。
【００９７】
（Ｓ３３）通信制御部２２１は、専用のコネクションを用意したオブジェクトの型毎に、複数のバッファに対応する複数のｓｃａｔｔｅｒリストを生成する。１つのｓｃａｔｔｅｒリストに列挙されるポインタは、何れか１つのバッファ内の各フィールドの記憶領域を指し示す。そして、通信制御部２２１は、生成したｓｃａｔｔｅｒリストを、制御情報記憶部２２２に格納すると共にＮＩＣ２１０にコピーする。ＮＩＣ２１０のメモリ２１２には、コネクションと対応付けて複数のｓｃａｔｔｅｒリストが格納される。
【００９８】
（Ｓ３４）通信制御部２２１は、オブジェクトの型毎の初期クレジット数を示すメッセージを、ＮＩＣ２１０を介してサーバ装置１００に送信する。初期クレジット数は、好ましくは、バッファ数およびｓｃａｔｔｅｒリスト数と同じである。
【００９９】
（Ｓ３５）ＮＩＣ２１０のＤＭＡコントローラ２１３は、サーバ装置１００からオブジェクトについてのメッセージを受信したか判断する。メッセージを受信した場合は処理をＳ３８に進め、メッセージを受信していない場合は処理をＳ３６に進める。
【０１００】
（Ｓ３６）通信制御部２２１は、データ処理部２３１から、何れかのバッファのデータが不要になった（バッファが空いた）旨の通知を受け取ったか判断する。データ処理部２３１からの通知には、例えば、オブジェクトの型とバッファ番号とが含まれる。通知を受け取った場合は処理をＳ４４に進め、受け取っていない場合は処理をＳ３７に進める。
【０１０１】
（Ｓ３７）通信制御部２２１は、サーバ装置１００とサーバ装置２００の間のオブジェクト通信を終了するか判断する。オブジェクト通信が終了する契機としては、例えば、アプリケーションプログラムの停止を示すコマンドがユーザから入力された場合が挙げられる。オブジェクト通信を終了しない場合は処理をＳ３５に進め、オブジェクト通信を終了する場合は図９のオブジェクト受信制御を停止する。
【０１０２】
（Ｓ３８）ＤＭＡコントローラ２１３は、メッセージを受信したコネクションが、ｓｃａｔｔｅｒリストが対応付けられている所定のコネクション（特定のオブジェクト型専用のコネクション）であるか判断する。所定のコネクションである場合は処理をＳ４０に進め、所定のコネクションでない場合は処理をＳ３９に進める。
【０１０３】
（Ｓ３９）ＤＭＡコントローラ２１３は、受信したメッセージを分割せずにストリーム形式のまま、ＯＳを介して通信制御部２２１に渡す。このとき、ＲＡＭ１０２上のＯＳが使用する記憶領域および通信制御部２２１が使用する記憶領域にメッセージが一時的にコピーされ得る。通信制御部２２１は、オブジェクトをソフトウェア処理によってデシリアライズする。すなわち、通信制御部２２１は、メッセージの内容からオブジェクトの型を判定し、メッセージから複数のフィールドのデータを抽出してオブジェクト記憶部２３２上にオブジェクトを再現する。このとき、オブジェクト記憶部２３２には、オブジェクトを記憶するための記憶領域が動的に確保される。そして、処理がＳ３５に進められる。
【０１０４】
（Ｓ４０）ＤＭＡコントローラ２１３は、メッセージを受信したコネクションに対応するｓｃａｔｔｅｒリストの集合の中から１つ（例えば、先頭の１つ）を、メモリ２１２から取得する。そして、ＤＭＡコントローラ２１３は、取得したｓｃａｔｔｅｒリストを用いて、メッセージに含まれる複数のフィールドのデータをハードウェア処理によってオブジェクト記憶部２３２に直接書き込む。すなわち、ＤＭＡコントローラ２１３は、ｓｃａｔｔｅｒリストに記載されたデータ長に従ってメッセージを分割し、各フィールドのデータをｓｃａｔｔｅｒリストに記載されたポインタが指し示す記憶領域に書き込む。
【０１０５】
（Ｓ４１）ＤＭＡコントローラ２１３は、使用したｓｃａｔｔｅｒリストを破棄する。また、ＤＭＡコントローラ２１３は、データを書き込んだバッファを示す情報（例えば、コネクション番号とｓｃａｔｔｅｒリスト番号）を通信制御部２２１に通知する。
【０１０６】
（Ｓ４２）通信制御部２２１は、受信されたメッセージが永続データを含むものである場合、オブジェクト記憶部２３２上に新たな記憶領域を確保し、永続データ用のテーブル内のバッファに書き込まれたデータをコピーする。ただし、前述のように、動的に確保する記憶領域に対してＮＩＣ２１０が永続データを直接書き込むようにしてデータのコピーを回避してもよい。永続データを設定するフィールドは予めユーザから指定されている。
【０１０７】
（Ｓ４３）通信制御部２２１は、データが書き込まれたバッファを示す情報（例えば、オブジェクトの型とバッファ番号）を、データ処理部２３１に通知する。また、通信制御部２２１は、受信されたメッセージが永続データを含むものである場合、動的に確保した記憶領域をデータ処理部２３１に通知する。そして、処理をＳ３５に進める。
【０１０８】
（Ｓ４４）通信制御部２２１は、空いたバッファに対応するｓｃａｔｔｅｒリストを制御情報記憶部２２２から取得すると共に、コネクションテーブルを参照してオブジェクトの型に対応するコネクションを確認する。そして、通信制御部２２１は、コネクションを指定してＮＩＣ２１０にｓｃａｔｔｅｒリストを渡す。メモリ２１２上に保持されている当該指定されたコネクションに対応するｓｃａｔｔｅｒリストの集合の中に（例えば、その末尾に）、渡されたｓｃａｔｔｅｒリストが追加される。
【０１０９】
（Ｓ４５）通信制御部２２１は、クレジットの付与を示すメッセージを、ＮＩＣ２１０を介してサーバ装置１００に送信する。そして、処理をＳ３５に進める。
なお、複数のコネクションを使用して複数のオブジェクトを送信すると、ネットワーク４１上でオブジェクトの順序が逆転する可能性がある。すなわち、データ処理部１３１が認識する送信順序とデータ処理部２３１が認識する受信順序が一致しない可能性がある。ただし、パラメータとして順序を示す情報をオブジェクトに挿入するなど、データ処理部１３１とデータ処理部２３１が順序逆転を考慮してデータ処理を行うことで、この問題を解消することができる。また、データ処理の結果が順序に依存しないようなオブジェクトの型やアプリケーションプログラムに限定して、専用のコネクションを利用したオブジェクト送信を行うようにしても、この問題を解消することができる。
【０１１０】
第２の実施の形態の情報処理システムによれば、複数のオブジェクトの型それぞれに対して専用のコネクションがサーバ装置１００，２００の間に確立される。よって、それらの型のオブジェクトについてはＮＩＣ２１０のｓｃａｔｔｅｒ／ｇａｔｈｅｒＤＭＡ機能を活用して定型的に処理することができ、全てのオブジェクトをソフトウェア処理によってデシリアライズする場合と比べてサーバ装置２００の負荷を軽減できる。従って、ソフトウェア処理がボトルネックになる可能性を減らし、オブジェクト送信を高速化できる。特に、送信頻度の高いオブジェクトの型に対して優先的に専用のコネクションを用意することで、オブジェクト送信がより高速化されることが期待できる。
【０１１１】
また、ＮＩＣ２１０のｓｃａｔｔｅｒ／ｇａｔｈｅｒＤＭＡ機能を活用することで、サーバ装置２００のＲＡＭ上でのデータのコピーを抑制することができ、記憶領域の動的な確保や解放のための負荷が軽減される。また、短期間で破棄される可能性が高い非永続データが設定されるフィールドに対してはテーブル形式の複数のバッファを用意し、それら複数のバッファを再利用することでガーベッジコレクションの負荷が軽減される。
【０１１２】
［第３の実施の形態］
次に、第３の実施の形態を説明する。前述の第２の実施の形態との差異を中心に説明し、第２の実施の形態と同様の事項については適宜説明を省略する。
【０１１３】
第３の実施の形態の情報処理システムは、オブジェクトの送信状況に応じて専用のコネクションを用意するオブジェクトの型を変更することができる。第３の実施の形態の情報処理システムは、図２〜８と同様のシステム構成によって実現できる。そこで、第２の実施の形態と同じ符号（図２〜８に記載した符号）を用いて第３の実施の形態を説明する。
【０１１４】
図１１は、他のオブジェクト送信制御の手順例を示すフローチャートである。図１１に示す処理は、サーバ装置１００において図９の処理と並行して実行される。
（Ｓ５１）通信制御部１２１は、オブジェクトの送信状況を監視し、オブジェクトの型毎の送信回数の統計を取る。送信回数は、例えば、直近の所定時間内での送信回数、または、以下のＳ５２，Ｓ５３の処理を前回実行したとき以降の送信回数などとする。
【０１１５】
（Ｓ５２）通信制御部１２１は、専用のコネクションを用意していないオブジェクトの型（コネクションテーブル１２３に未登録の型）の中に、送信が多いものが存在するか判断する。判断基準としては、例えば、送信回数が予め設定された閾値以上であることや、全てのオブジェクト送信に占める送信回数の割合が予め設定された閾値以上であることなどが挙げられる。未登録の型の中に上記の条件を満たす型が存在する場合は処理をＳ５５に進め、上記の条件を満たす型が存在しない場合は処理をＳ５３に進める。
【０１１６】
（Ｓ５３）通信制御部１２１は、専用のコネクションを用意したオブジェクトの型（コネクションテーブル１２３に登録されている型）の中に、送信が少ないものが存在するか判断する。判断基準としては、例えば、送信回数が予め設定された閾値未満であることや、全てのオブジェクト送信に占める送信回数の割合が予め設定された閾値未満であることや、前回オブジェクトを送信した時刻から一定時間以上経過していることなどが挙げられる。登録された型の中に上記の条件を満たす型が存在する場合は処理をＳ５９に進め、上記の条件を満たす型が存在しない場合は処理をＳ５４に進める。
【０１１７】
（Ｓ５４）通信制御部１２１は、サーバ装置１００とサーバ装置２００の間のオブジェクト通信を終了するか判断する。オブジェクト通信を終了しない場合、Ｓ５１に戻ってオブジェクトの送信状況を監視する（例えば、送信回数を所定時間カウントする）。オブジェクト通信を終了する場合、図１１の他のオブジェクト送信制御を停止する。
【０１１８】
（Ｓ５５）通信制御部１２１は、通信リソースが余っているか、すなわち、ＮＩＣ１１０がコネクションを追加することが可能か判断する。通信リソースが余っている場合は処理をＳ５６に進め、通信リソースが余っていない場合は処理をＳ５３に進める。
【０１１９】
（Ｓ５６）通信制御部１２１は、サーバ装置２００とネゴシエーションして、送信が多いと判断されたオブジェクトの型に対応するコネクションを追加することを試みる。すなわち、通信制御部１２１は、ＮＩＣ１１０を介してサーバ装置２００にコネクション確立要求を送信し、サーバ装置２００からの応答を待つ。サーバ装置２００から許可応答が得られると、通信制御部１２１は、ＮＩＣ２１０にコネクションを追加するよう指示する。なお、コネクション確立要求ではオブジェクトの型が指定される。
【０１２０】
（Ｓ５７）通信制御部１２１は、Ｓ５６のネゴシエーションの結果、コネクションの確立に成功したか判断する。コネクションの確立に失敗する場合は、サーバ装置２００から拒否応答を受け取った場合が含まれる。コネクション確立に成功した場合は処理をＳ５８に進め、コネクション確立に失敗した場合は処理をＳ５３に進める。
【０１２１】
（Ｓ５８）通信制御部１２１は、制御情報記憶部１２２に記憶されたコネクションテーブル１２３に、オブジェクトの型と確立したコネクションの識別番号を対応付けて登録する。また、通信制御部１２１は、サーバ装置２００から初期クレジット数を示すメッセージを取得し、制御情報記憶部１２２に記憶されたクレジットテーブル１２４に、オブジェクトの型と初期クレジット数を対応付けて登録する。そして、処理をＳ５３に進める。
【０１２２】
（Ｓ５９）通信制御部１２１は、サーバ装置２００と連携して、送信が少ないと判断されたオブジェクトの型に対応するコネクションを切断する。すなわち、通信制御部１２１は、ＮＩＣ１１０を介してサーバ装置２００にコネクション解放要求を送信し、サーバ装置２００から応答が得られるとＮＩＣ２１０にコネクションを切断するよう指示する。なお、コネクション切断要求ではオブジェクトの型が指定される。
【０１２３】
（Ｓ６０）通信制御部１２１は、切断したコネクションの識別番号をコネクションテーブル１２３から削除する。また、通信制御部１２１は、切断したコネクションに関するクレジット数をクレジットテーブル１２４から削除する。そして、処理をＳ５４に進める。
【０１２４】
図１２は、他の受信制御の手順例を示すフローチャートである。図１２に示す処理は、サーバ装置２００において図１０の処理と並行して実行される。
（Ｓ７１）通信制御部２２１は、サーバ装置１００からＮＩＣ２１０を介してコネクション確立要求を受信したか判断する。コネクション確立要求を受信した場合は処理をＳ７４に進め、コネクション確立要求を受信していない場合は処理をＳ７２に進める。
【０１２５】
（Ｓ７２）通信制御部２２１は、サーバ装置１００からＮＩＣ２１０を介してコネクション解放要求を受信したか判断する。コネクション解放要求を受信した場合は処理をＳ７９に進め、コネクション解放要求を受信していない場合は処理をＳ７３に進める。
【０１２６】
（Ｓ７３）通信制御部２２１は、サーバ装置１００とサーバ装置２００の間のオブジェクト通信を終了するか判断する。オブジェクト通信を終了しない場合は処理をＳ７１に進め、オブジェクト通信を終了する場合は図１２の他のオブジェクト受信制御を停止する。
【０１２７】
（Ｓ７４）通信制御部２２１は、通信リソースが余っているか、すなわち、ＮＩＣ２１０がコネクションを追加することが可能か判断する。通信リソースが余っている場合は処理をＳ７５に進め、通信リソースが余っていない場合は処理をＳ７８に進める。
【０１２８】
（Ｓ７５）通信制御部２２１は、ＮＩＣ２１０を介してサーバ装置１００に許可応答のメッセージを送信する。また、通信制御部２２１は、ＮＩＣ２１０にコネクションを追加するよう指示する。これにより、サーバ装置１００，２００の間に新たなコネクションが確立される。通信制御部２２１は、コネクション確立要求で指定されたオブジェクトの型とコネクションの識別番号とを対応付けてコネクションテーブルに登録する。
【０１２９】
（Ｓ７６）通信制御部２２１は、オブジェクト記憶部２３２に、コネクション確立要求で指定されたオブジェクトの型に対応するテーブル構造のバッファ領域を確保する。確保したバッファ領域には、所定数（例えば、数十から数百）のバッファが含まれる。なお、永続データが設定されるフィールドはユーザによって予め指定されている。
【０１３０】
（Ｓ７７）通信制御部２２１は、複数のバッファに対応する複数のｓｃａｔｔｅｒリストを生成する。そして、通信制御部２２１は、生成したｓｃａｔｔｅｒリストを制御情報記憶部２２２に格納すると共に、追加したコネクションと対応付けてＮＩＣ２１０にコピーする。また、通信制御部２２１は、初期クレジット数を示すメッセージをＮＩＣ２１０を介してサーバ装置１００に送信する。そして、処理をＳ７１に進める。
【０１３１】
（Ｓ７８）通信制御部２２１は、ＮＩＣ２１０を介してサーバ装置１００に拒否応答のメッセージを送信する。そして、処理をＳ７１に進める。
（Ｓ７９）通信制御部２２１は、コネクションテーブルを参照して、コネクション解放要求で指定されたオブジェクトの型に対応するコネクションを特定し、そのコネクションを切断するようＮＩＣ２１０に指示する。また、通信制御部２２１は、ＮＩＣ２１０を介してサーバ装置１００に応答メッセージを送信する。また、通信制御部２２１は、切断したコネクションの識別番号をコネクションテーブルから削除する。
【０１３２】
（Ｓ８０）通信制御部２２１は、オブジェクト記憶部２３２上で、コネクション解放要求で指定されたオブジェクトの型に対応するテーブル構造のバッファ領域を解放する。
（Ｓ８１）通信制御部２２１は、切断したコネクションに対応するｓｃａｔｔｅｒリストを制御情報記憶部２２２から削除し、また、ＮＩＣ２１０のメモリ２１２から削除するようＯＳを介してＮＩＣ２１０に指示する。そして、処理をＳ７１に進める。
【０１３３】
なお、上記Ｓ７９〜Ｓ８１の処理は任意の順序で実行することが可能である。
第３の実施の形態の情報処理システムによれば、第２の実施の形態と同様の効果が得られる。更に、第３の実施の形態では、あるオブジェクトの型の送信頻度が高くなったときに、その型に対して自動的に専用のコネクションが割り当てられる。また、あるオブジェクトの型の送信頻度が低くなったときに、その型に対して割り当てていた専用のコネクションが自動的に解放される。よって、オブジェクトの型毎の送信頻度が事前の予測と異なっても、柔軟にコネクションを制御してオブジェクトの送信効率を向上できる。
【０１３４】
以上の第２・第３の実施の形態では、サーバ装置１００からサーバ装置２００にオブジェクトを送信する場合について説明したが、サーバ装置２００からサーバ装置１００へもオブジェクトが送信され得る。このとき、コネクションは片方向の通信にのみ使用してもよいし双方向の通信に使用してもよい。前者の場合、サーバ装置１００からサーバ装置２００にオブジェクトを送信するためのコネクションが確立されていても、サーバ装置２００からサーバ装置１００にオブジェクトを送信するときは別のコネクションを確立する。一方、後者の場合、サーバ装置１００からサーバ装置２００にオブジェクトを送信するためのコネクションが確立されていれば、サーバ装置２００からサーバ装置１００にオブジェクトを送信するときは確立済みのコネクションを利用する。
【０１３５】
また、以上の第２・第３の実施の形態では、２台のサーバ装置の間でオブジェクトを送信する場合について説明したが、３台以上のサーバ装置の間でオブジェクトを送信する場合も、２台のサーバ装置の組毎にコネクションを確立すればよい。ただし、第３の実施の形態で説明したコネクションの確立や解放の判断は、各サーバ装置で分散して行う代わりに１台のマスタサーバ装置で集中的に行ってもよい。その場合、例えば、マスタサーバ装置が少なくとも１台のサーバ装置におけるオブジェクトの送信状況を監視すれば、オブジェクトの型毎の送信頻度の傾向を把握することができる。また、第３の実施の形態では、送信側のサーバ装置１００でコネクションの確立や解放の判断を行ったが、受信側のサーバ装置２００でコネクションの確立や解放の判断を行ってもよい。
【０１３６】
なお、第１の実施の形態のソフトウェア処理は、情報処理装置１０，２０にプログラムを実行させることで実現できる。また、第２・第３の実施の形態のソフトウェア処理は、クライアント装置３０やサーバ装置１００，２００にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体４４）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムを複製して（インストールして）実行してもよい。
【符号の説明】
【０１３７】
３ａ，３ｂ，３ｃ  コネクション
４ａ，４ｂ，４ｃ  オブジェクト
１０，２０  情報処理装置
１１，２１  通信インタフェース
１２  制御部
２２  メモリ
【図１】
2014123182.tif 000003
【図２】
2014123182.tif 000004
【図３】
2014123182.tif 000005
【図４】
2014123182.tif 000006
【図５】
2014123182.tif 000007
【図６】
2014123182.tif 000008
【図７】
2014123182.tif 000009
【図８】
2014123182.tif 000010
【図９】
2014123182.tif 000011
【図１０】
2014123182.tif 000012
【図１１】
2014123182.tif 000013
【図１２】
2014123182.tif 000014