(57)【要約】【課題】少ない処理負担、通信負担で監視対象の状態を逐次クライアントに通知することのできるＨＴＴＰサーバ及びそのプログラムを提供する。【解決手段】監視対象に関する報告を要求するＨＴＴＰリクエストをクライアントから受信し、該ＨＴＴＰリクエストに対する応答として、監視対象に変化が生じる毎に、その報告をチャンク形式転送コーディングのチャンクにしてクライアントに返信する。【選択図】図２
2008225718.tif 000002
【特許請求の範囲】
【請求項１】
クライアントと通信を行う通信部と、
前記通信部を介して前記クライアントから受信した監視対象に関する報告を要求するＨＴＴＰリクエストに対する応答として、前記監視対象に変化が生じた場合に前記報告をチャンク形式転送コーディングのチャンクにして前記通信部を介して前記クライアントに返信する制御部と、
を備えたことを特徴とするＨＴＴＰサーバ。
【請求項２】
前記報告を、既に報告した前記監視対象の状態との差分を示す情報により行う
ことを特徴とする請求項１に記載のＨＴＴＰサーバ。
【請求項３】
前記チャンクにより送信するデータにユニークなヘッダおよびフッタを付加する
ことを特徴とする請求項１に記載のＨＴＴＰサーバ。
【請求項４】
前記監視対象に関する変化は印刷装置の状態変化もしくは印刷装置におけるジョブの状態の変化である
ことを特徴とする請求項１に記載のＨＴＴＰサーバ。
【請求項５】
サーバを、監視対象に関する報告を要求するＨＴＴＰリクエストをクライアントから受信し、このＨＴＴＰリクエストに対する応答として、前記監視対象に変化が生じた場合に前記報告をチャンク形式転送コーディングのチャンクにして前記クライアントに返信するＨＴＴＰサーバとして動作させる
ことを特徴とするプログラム。
【請求項６】
前記報告を、前回報告した前記監視対象の状態との差分を示す情報により行うように前記サーバを動作させる
ことを特徴とする請求項５に記載のプログラム。
【請求項７】
前記サーバを、前記チャンクにより送信するデータにユニークなヘッダおよびフッタを付加するように動作させる
ことを特徴とする請求項５に記載のプログラム。
【請求項８】
前記監視対象が、印刷装置の状態もしくは印刷装置におけるジョブの状態である
ことを特徴とする請求項５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、チャンク形式転送コーディングに対応したＨＴＴＰサーバ及びそのプログラムに関する。
【背景技術】
【０００２】
ＨＴＴＰ(Hypertext Transfer Protocol)リクエストに対する応答の１つとしてチャンク形式転送コーディング（Chunked Transfer Coding）による応答があり、Hypertext Transfer Protocol -- HTTP/1.1のＲＦＣ（Request for Comments）２６１６にその詳細が規定されている。チャンク形式転送コーディングは、ＨＴＴＰリクエストに対する応答として、データをいくつかの塊(チャンク)に分割して返信する転送方式である。
【０００３】
たとえば、ＪＰＥＧ２０００に準拠したコードストリームのタイルパーツをチャンクにして転送する技術が提案されている（特許文献１参照。）。
【０００４】
【特許文献１】特開２００４−２０８２６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来、ネットワーク上のプリンタにおけるジョブの進捗状況などをサーバに問い合わせる場合、クライアントからサーバに接続してプリンタやジョブに関する状況報告の要求を送信し、この要求に対してサーバはクライアントへ１回の状況報告を返信した後、切断するという動作で通信が行われていた。このため、クライアント側でプリンタの状況を継続的に把握しようとすると、上記した接続、要求の送信、報告の返信、切断という一連の動作を繰り返し行う必要があった。この方法では、通信のオーバーヘッドが大きい、サーバおよびクライアントの処理負担が共に増加する、状況報告の要求を送信する周期の長さに依存してプリンタ側の実際の状態とクライアント側で把握しているプリンタの状態との間にずれが生じて整合しない、といった問題があった。
【０００６】
たとえば、図１０では、クライアントからサーバ機能を備えたプリンタコントローラへ接続してジョブリストの通知を要求（Ｒｅｑ）し、その要求に対する応答（Ｒｅｓ）としてジョブリストが１回返信された後、切断するという一連の動作からなる通信セットＨが一定周期で繰り返し行われることにより、クライアント側のジョブリストが更新されている。
【０００７】
この例では、通信セットＨ２、Ｈ６は、前回の通信セットＨ１、Ｈ５を実施した後、プリンタコントローラ側のジョブ状態に変化がないうちに行われており、クライアントに新たな情報の通知されない無駄な通信になっている。
【０００８】
さらに、通信セットＨ２での応答（Ｒｅｓ）を時刻Ｔ１にプリンタコントローラからクライアントへ送信後、通信セットＨ３での応答（Ｒｅｓ）の送信が時刻Ｔ４に行われるまでの間にプリンタコントローラではＩＤ３のジョブが時刻Ｔ２に新規投入されその１ページ目の印刷が時刻Ｔ３に完了している。このため、ＩＤ３のジョブが投入されたときの情報はクライアント側に表示されずスキップされている。
【０００９】
またプリンタコントローラ側でジョブ状態が変化した時点（Ｔ２、Ｔ３、Ｔ５、Ｔ７、Ｔ９）に対して、これらの変化がクライアント側のジョブリストに反映される時点（Ｔ４、Ｔ６、Ｔ８、Ｔ１０、）は時間的に遅れており、その遅れの間はプリンタコントローラ側とクライアント側とでジョブリストの状態に食い違いが生じて整合していない。
【００１０】
なお、通信のオーバーヘッドが大きい、サーバおよびクライアントの処理負担が共に増加する、サーバ側での状態とクライアント側で把握される状態とにずれが生じる、といった問題は、上記したプリンタの状態を監視する場合に限らず、如何なる監視対象に対しても発生し得る。
【００１１】
本発明は、上記の問題点に鑑みてなされたものであり、少ない処理負担、通信負担で監視対象の状態を、整合性を保ってクライアントへ通知することができるＨＴＴＰサーバ及びそのプログラムを提供することを目的としている。
【課題を解決するための手段】
【００１２】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
【００１３】
［１］  クライアントと通信を行う通信部と、
前記通信部を介して前記クライアントから受信した監視対象に関する報告を要求するＨＴＴＰリクエストに対する応答として、前記監視対象に変化が生じた場合に前記報告をチャンク形式転送コーディングのチャンクにして前記通信部を介して前記クライアントに返信する制御部と、
を備えたことを特徴とするＨＴＴＰサーバ。
【００１４】
上記［１］および下記［５］に記載の発明では、監視対象に変化が生じる毎に、該監視対象に関する報告がチャンク形式のデータにしてサーバからクライアントへ送信される。すなわち、監視対象に関する報告を要求するＨＴＴＰリクエストを受けたときサーバ・クライアント間が接続され、その後は該接続が維持される。そして監視対象に変化が生じたタイミングでこの監視対象に関する報告がサーバからクライアントへチャンク形式のデータで逐次送信される。このように、１つのチャンクに１つの意味を持たせている。
【００１５】
［２］前記報告を、既に報告した前記監視対象の状態との差分を示す情報により行う
ことを特徴とする［１］に記載のＨＴＴＰサーバ。
【００１６】
上記［２］および下記［６］に記載の発明では、監視対象に変化が生じたとき、前回の報告との差分、すなわち、変化の内容が報告としてチャンク形式のデータで送信される。送信データ量が減り、サーバ、クライアント、ネットワークそれぞれの負担が減少する。
【００１７】
［３］前記チャンクにより送信するデータにユニークなヘッダおよびフッタを付加する
ことを特徴とする［１］に記載のＨＴＴＰサーバ。
【００１８】
上記［３］および下記［７］に記載の発明では、サーバから受けた報告の表示にクライアント側でＷｅｂブラウザおよびＡｊａｘを使用する場合に、ユニークなヘッダ／フッタをキーとしてチャンク形式のデータをチャンク毎に後で分割することができる。
【００１９】
［４］前記監視対象に関する変化は印刷装置の状態変化もしくは印刷装置におけるジョブの状態の変化である
ことを特徴とする［１］に記載のＨＴＴＰサーバ。
【００２０】
上記［４］および下記［８］に記載の発明では、印刷装置でのエラー発生やジョブの投入、削除、進行状況などがクライアントへ報告される。
【００２１】
［５］サーバを、監視対象に関する報告を要求するＨＴＴＰリクエストをクライアントから受信し、このＨＴＴＰリクエストに対する応答として、前記監視対象に変化が生じた場合に前記報告をチャンク形式転送コーディングのチャンクにして前記クライアントに返信するＨＴＴＰサーバとして動作させる
ことを特徴とするプログラム。
【００２２】
［６］前記報告を、前回報告した前記監視対象の状態との差分を示す情報により行うように前記サーバを動作させる
ことを特徴とする［５］に記載のプログラム。
【００２３】
［７］前記サーバを、前記チャンクにより送信するデータにユニークなヘッダおよびフッタを付加するように動作させる
ことを特徴とする［５］に記載のプログラム。
【００２４】
［８］前記監視対象が、印刷装置の状態もしくは印刷装置におけるジョブの状態である
ことを特徴とする［５］に記載のプログラム。
【発明の効果】
【００２５】
本発明に係るＨＴＴＰサーバ及びプログラムによれば、少ない処理負担、通信負担で監視対象の状態を、整合性を保ってクライアントへ通知することができる。
【発明を実施するための最良の形態】
【００２６】
以下、図面に基づき本発明の実施の形態を説明する。
【００２７】
図１は、本発明の一実施形態に係るサーバ・クライアントシステム５のハードウェアの概略構成を示すブロック図である。このサーバ・クライアントシステム５は、ＨＴＴＰサーバとしての機能を有するプリンタコントローラ１０と、このプリンタコントローラ１０にアクセスするクライアント３０とがネットワーク２に接続されて構成される。又、プリンタコントローラ１０は、プリンタ２０にローカル接続されている。
【００２８】
プリンタコントローラ１０は、通信機能を有するパーソナルコンピュータ（ＰＣ）で構成される。詳しくは、プリンタコントローラ１０は、全体制御を司るＣＰＵ（Central Processing Unit）、各種データが一時的に格納されるＲＡＭ（Random Access Memory）、各種プログラムが格納されたＲＯＭ（Read Only Memory）、ネットワーク２を介してクライアント３０と通信を行うＮＩＣ（Network Interface Card）、及びＵＳＢ（Universal Serial Bus）ケーブルを介してプリンタ２０と通信を行うＵＳＢカードを備え、これらがバスを介して互いに接続されている。
【００２９】
プリンタは、全体制御を司るＣＰＵ、各種データが一時的に格納されるＲＡＭ、各種プログラムが格納されたＲＯＭ、印刷データ中の画像データに階調補正、スクリーニング等の画像処理を施す画像処理回路、及びＵＳＢケーブルを介してプリンタコントローラ１０と通信を行うＵＳＢカードを備え、これらがバスを介して互いに接続されている。
【００３０】
又、クライアント３０は、通信機能を有するＰＣで構成され、ビデオコントローラを介してディスプレイに接続されている以外はプリンタコントローラ１０と同様の構成を有するため、ここでの重複説明は省略する。
【００３１】
図２は、サーバ・クライアントシステム５の機能上の概略構成を示すブロック図である。プリンタコントローラ１０はネットワーク２を通じてクライアント３０から印刷ジョブの依頼を受信し、この依頼に従ってイメージデータを展開し、該イメージデータに対応する画像をプリンタ本体で印刷出力させる制御などを行う。また、プリンタコントローラ１０は、監視対象としてのプリンタ本体やジョブの状態に関する報告を要求するＨＴＴＰリクエストをクライアント３０から受信し、該ＨＴＴＰリクエストに対する応答として、監視対象に変化が生じた場合にその報告をチャンク形式転送コーディングのチャンク（チャンク形式のデータ）にしてクライアントに返信する機能を備えている。
【００３２】
なお、プリンタコントローラ１０はＲＯＭに格納されたプリンタコントローラプログラム１１をＣＰＵが実行することによって上記の機能を実現する。
一方、クライアント３０は、クライアントアプリケーション３１と称されるプログラムを実行する。クライアントアプリケーション３１を実行することで、プリンタコントローラ１０に対して印刷ジョブの実行を依頼する機能（プリンタドライバの機能）、依頼したジョブの一覧やジョブの状態をプリンタコントローラ１０から取得して表示する機能などが実現される。
【００３３】
プリンタコントローラプログラム１１は内部モジュールとして、一般的なプリンタコントローラが持つようなジョブキューの管理を行うジョブ制御部１２と、クライアントアプリケーション３１からの接続を受け付ける受付スレッド１３と、クライアントアプリケーション３１に送信するデータをバッファする送信データキュー１４と、依頼されたジョブを実行するジョブ処理部１５と、クライアントアプリケーション３１と接続してデータの送信を行う接続スレッド１６とを有する。クライアント３０は複数台存在し、それぞれに専用で用意される接続スレッド１６と接続される。
【００３４】
受付スレッド１３は、プリンタコントローラプログラム１１の初期化時に生成され、プリンタコントローラプログラム１１の終了時に削除される。受付スレッド１３はクライアント３０からのＨＴＴＰリクエストを受け付ける。クライアント３０からのＨＴＴＰリクエストには接続要求とコマンドの２種類がある。接続要求はチャンク形式転送の開始を要求し、コマンドは主にジョブの操作（ジョブの新規投入や削除、優先順位変更、キャンセルなど)に利用される。接続要求は、クライアント３０が監視対象としてのプリンタやジョブの状態に関する報告をプリンタコントローラ１０に対して要求するものであり、クライアント３０から接続要求を受けたとき、受付スレッド１３はそのクライアント３０へチャンク形式で応答を送信するための接続スレッド１６を生成する。
【００３５】
クライアントアプリケーション３１は、受付スレッド１３とクライアントアプリケーション３１との間の接続Ｐ１を通じて、接続要求やジョブ操作コマンドを受付スレッド１３へ投入する。受付スレッド１３はジョブ操作コマンドに関するAck/Nackを接続Ｐ１にてクライアント３０へ返答する。
【００３６】
なお、ＨＴＴＰリクエストが接続要求かコマンドかの判別はRequest-URIで判別される。すなわち、要求先のリソースが異なることで判別される。たとえば、ジョブ詳細情報取得コマンドのＨＴＴＰリクエストヘッダの先頭２行は以下のようになる。  
GET /KM/MFP/100/JobInfo HTTP/1.1 
Host: gentleman.msk.minolta.co.jp:1123
【００３７】
接続要求のＨＴＴＰリクエストヘッダの先頭２行は以下のようになる。  
GET /KM/QueueInfo HTTP/1.1
Host: gentleman.msk.minolta.co.jp:1123
【００３８】
ジョブ制御部１２は、クライアントアプリケーション３１から依頼されたジョブの情報をジョブの実行順位と関連付けて保存するジョブキューを管理している。ジョブキューの内容に変化が生じた場合は、接続要求に対する応答として速やかにクライアントにその変化内容(監視対象に関する報告)を通知するようになっている。ジョブ制御部１２は、受付スレッド１３がクライアントアプリケーション３１から受信したジョブ操作コマンドを受付スレッド１３から接続Ｐ２を介して受け取る。また、ジョブ処理部１５との間の接続Ｐ３を通じて、次に実行すべきジョブをジョブ処理部１５へ通知したり、ジョブに対する操作（実行中のジョブのキャンセルや一時停止など）をジョブ処理部１５へ通知したりする。
【００３９】
ジョブ処理部１５は、ジョブ制御部１２から通知されたジョブ操作に応じてジョブを実行する。具体的には、印刷データをラスタ・イメージに展開する動作（以下、ＲＩＰ（Raster Image Processor）とも呼ぶ）や、実行中のジョブの中止あるいは一時停止などを行う。ジョブ処理部１５は接続Ｐ３を通じてジョブ制御部１２へジョブの進捗状況を通知する。たとえば、ラスタ・イメージ展開（ＲＩＰ）がどこまで進んだか、印刷が何枚目まで進んだか、エラーが起きたかなどの情報をジョブ制御部１２へ通知する。
【００４０】
また、ジョブ制御部１２は、クライアント３０に返すべきデータを、接続Ｐ４を通じて送信データキュー１４に投入する。ここでは、接続要求に対する応答としてクライアント３０にチャンク形式転送によって送信すべきデータが投入される。
【００４１】
接続スレッド１６は、受付スレッド１３が接続要求を受けた場合に受付スレッド１３によって生成され、その接続要求の送信元のクライアント３０と１：１での接続を行う。接続スレッド１６は送信データキュー１４にデータがあるか否かを確認し、ある場合は、接続Ｐ５を通じて送信データキュー１４からデータを取り出し、このデータをチャンク形式転送コーディングの１つのチャンクにしてクライアント３０へ接続Ｐ６を通じて送信する機能を果たす。
【００４２】
次に、各モジュールの動作を説明する。
【００４３】
図３は、受付スレッド１３の動作を示すフローチャートである。受け付けスレッド１３は起動後、クライアント３０からＨＴＴＰリクエストが送られてくるか否かを監視する(ステップＳ１０１)。クライアント３０から要求（ＨＴＴＰリクエスト）がある場合(ステップＳ１０１；Yes)は、その要求が接続要求か、コマンドであるかを判別し(ステップＳ１０２)、接続要求であれば接続スレッド１６を起動する(ステップＳ１０３)。一方、コマンドであれば(ステップＳ１０２；No)、そのコマンドをジョブ制御部１２に通知する(ステップＳ１０４)。
【００４４】
ループ末で自身に対する終了要求があれば(ステップＳ１０５；Yes)自身の作業を終了する（Ｅｎｄ）。終了要求がない場合は（ステップＳ１０５；No）、ステップＳ１０１へ戻り、以降同様の処理を行う。なお、終了要求は、プリンタコントローラプログラム１１自体への終了を促すコマンドである。
【００４５】
図４は、接続スレッド１６の動作を示すフローチャートである。接続スレッド１６は受付スレッド１３により起動され、指定されたクライアント３０と１対１の通信を行う。接続スレッド１６は起動されると、その時点での全ジョブリストをジョブ制御部１２から受け取り、これを対象のクライアント３０に送信する（ステップＳ２０１）。ジョブリストとは、プリンタコントローラプログラム１１が持つジョブに関する情報の一覧である。
【００４６】
その後、接続スレッド１６はクライアント３０との接続を監視し、クライアント３０側から接続を切断された場合は（ステップＳ２０２；No）、自身を終了させる（Ｅｎｄ）。クライアント３０との接続があるときは(ステップＳ２０２；Yes)、送信データキュー１４にデータがあるかどうか確認し（ステップＳ２０３）、ある場合は（ステップＳ２０３；Yes）、送信データキュー１４からそのデータを取り出してクライアント３０に送信する（ステップＳ２０４）。
【００４７】
ループ末で自身に対する終了要求があれば(ステップＳ２０５；Yes)自身の作業を終了する（Ｅｎｄ）。終了要求がない場合は（ステップＳ２０５；No）、ステップＳ２０２へ戻り、以降同様の処理を行う。
【００４８】
なお、ジョブリストは、ジョブ制御部１２が管理しているジョブキューに格納されているジョブ情報に基づいて作成される。ジョブキューには、内部コードでジョブ情報が格納されており、ジョブリストはジョブキュー内のジョブ情報を以下に示すような文字列によるＸＭＬ（eXtensible Markup Language）文書に変換したものである。
【００４９】
以下に例示するジョブリストには、完了したジョブが２つ登録されている。  
<JobList>
<Job>
<Queueid>Done</Queueid>
<Jobid>1</Jobid>
<Jobname>hoge</Jobname>
<Jobowner>vpprotarou</Jobowner>
<Jobkind>Print</Jobkind>
<Numofcopy>1</Numofcopy>
<Jobreceivedtime>2006/07/05/16/05</Jobreceivedtime>
<Ripstatus>Done</Ripstatus>
<Rippedpages>10</Rippedpages>
<Ripendtime>2006/07/05/16/05</Ripendtime>
<Transferstatus>Done</Transferstatus>
<Transferredpages>0</Transferredpages>
<Transferendtime>2006/07/05/16/05</Transferendtime>
<Printstatus>Done</Printstatus>
<PrintedPages>0</PrintedPages>
<Printendtime>2006/07/05/16/05</Printendtime>
<Ripdata>Yes</Ripdata>
</Job>
<Job>
<Queueid>Done</Queueid>
<Jobid>2</Jobid>
<Jobname>hoge</Jobname>
<Jobowner>vpprotarou</Jobowner>
<Jobkind>Print</Jobkind>
<Numofcopy>1</Numofcopy>
<Jobreceivedtime>2006/07/05/16/05</Jobreceivedtime>
<Ripstatus>Done</Ripstatus>
<Rippedpages>10</Rippedpages>
<Ripendtime>2006/07/05/16/05</Ripendtime>
<Transferstatus>Done</Transferstatus>
<Transferredpages>0</Transferredpages>
<Transferendtime>2006/07/05/16/05</Transferendtime>
<Printstatus>Done</Printstatus>
<PrintedPages>0</PrintedPages>
<Printendtime>2006/07/05/16/05</Printendtime>
<Ripdata>Yes</Ripdata>
</Job>
</JobList>
【００５０】
図５は、ジョブ制御部１２の動作を示すフローチャートである。ジョブ制御部１２は初期化で受付スレッド１３を生成する（ステップＳ３０１）。ジョブ制御部１２は受付スレッド１３からのコマンドの有無を確認し(ステップＳ３０２)、コマンドがある場合（ステップＳ３０２；Yes）、そのコマンドを実行する(ステップＳ３０３)。実行したコマンドがジョブキューに影響を及ぼすものかどうかを確認し（ステップＳ３０４）、ジョブキューに影響を及ぼす場合は（ステップＳ３０４；Yes）、その変化情報を送信データキュー１４に投入する（ステップＳ３０５）。ジョブキューに影響を及ぼすコマンドは、たとえば、ジョブの投入、ジョブの削除、ジョブの一時停止などを指示するコマンドである。
【００５１】
また、ジョブ制御部１２はジョブ処理部１５からの通知の有無を確認し（ステップＳ３０６）、通知がある場合は(ステップＳ３０６；Yes)、その通知内容がジョブキューに影響を及ぼすものかどうかを確認し(ステップＳ３０７)、ジョブキューに影響を及ぼす場合は（ステップＳ３０７；Yes）、その変化情報を送信データキュー１４に投入する（ステップＳ３０８）。ジョブキューに影響を及ぼす通知は、たとえば、ＲＩＰがどこまで進んだか、印刷が何枚目まで進んだか、エラーが起きたかなどの通知である。
【００５２】
ループ末で自身に対する終了要求があれば(ステップＳ３０９；Yes)自身の作業を終了する（Ｅｎｄ）。終了要求がない場合は（ステップＳ３０９；No）、ステップＳ３０２へ戻り、以降同様の処理を行う。
【００５３】
上記ステップＳ３０５、Ｓ３０８において送信データキュー１４に投入されるデータは、変化情報、すなわち、変化前のジョブキューの内容と変化後のジョブキューの内容との差分データをジョブリストの形式で表したものである。
【００５４】
たとえば、図５のステップＳ３０５で実行されるコマンドが新規ジョブ投入であれば、ジョブリストにジョブを追加する意味の以下のデータが送信データキュー１４に投入される。この例はＩＤ３のジョブがジョブキューに追加された場合を示している。  
<AddJob>
<Job>
<Queueid>Wait</Queueid>
<Jobid>3</Jobid>
<Jobname>hoge</Jobname>
<Jobowner>vpprotarou</Jobowner>
<Jobkind>Print</Jobkind>
<Numofcopy>1</Numofcopy>
<Jobreceivedtime>2006/07/05/16/05</Jobreceivedtime>
<Ripstatus>Wait</Ripstatus>
<Rippedpages>0</Rippedpages>
<Ripendtime/>
<Transferstatus/>
<Transferredpages/>
<Transferendtime/>
<Printstatus>Wait</Printstatus>
<PrintedPages>0</PrintedPages>
<Printendtime/>
<Ripdata>No</Ripdata>
</Job>
</AddJob>
【００５５】
また、図５のステップＳ３０６でジョブ処理部１５から受けた通知が、ＲＩＰが1枚進んだ旨であれば、ＲＩＰ枚数が変化したことを示す以下のデータが送信データキュー１４に投入される。この例はジョブＩＤ３のジョブのＲＩＰ済ページがページ「１」に進んだことを示している。
<JobEdit>
<Queueid>Wait</Queueid>
<Jobid>3</Jobid>
<Ripstatus>Processing</Ripstatus>
<Rippedpages>1</Rippedpages>
</JobEdit>
【００５６】
このように差分データのみを送信データキュー１４に投入することで、この差分データがクライアント３０へ送信されるようになり、全ジョブリストを毎回クライアント３０へ送信する場合に比べて、送信データ量が低減し、プリンタコントローラ１０およびクライアント３０の処理負荷およびネットワークのトラフィック負荷が軽減される。
【００５７】
なお、送信するデータはＸＭＬ形式である必要はなく、ＣＳＶ（Comma Separated Values）形式などバイナリデータであれば他のデータ形式であってもかまわない。
【００５８】
図６は、クライアントアプリケーション３１の動作を示すフローチャートである。クライアントアプリケーション３１はプリンタコントローラプログラム１１に対して接続要求を行う（ステップＳ４０１）。該接続要求を送信した後、接続が成功したかどうかを確認し（ステップＳ４０２）、接続不成功の場合は（ステップＳ４０２；No）、本処理を終了する（Ｅｎｄ）。
【００５９】
接続成功の場合は(ステップＳ４０２；Yes)、接続スレッド１６からのデータが送信されて来るのを待機し（ステップＳ４０３；No）、接続スレッド１６からデータが送信されてきた場合は(ステップＳ４０３；Yes)、通知処理を行う（ステップＳ４０４）。通知処理では、接続スレッド１６から送られて来たデータに従ってクライアント３０の表示画面にジョブリストを表示したり、表示中のジョブリストの内容を更新したりする。
【００６０】
その後、クライアントアプリケーション３１は接続スレッド１６との接続状態を確認し（ステップＳ４０５）、接続が正常であれば(ステップＳ４０５；No)、ステップＳ４０３へ戻って、以後同様の処理を行う。接続が切断された場合はステップＳ４０５；Yes)本処理を終了する（Ｅｎｄ）。
【００６１】
次に、サーバ・クライアントシステム５全体における動作シーケンスを図７に基づいて説明する。図７に示す例は、１）プリンタコントローラ１０とクライアントアプリケーション３１を起動、２）プリンタコントローラ１０とクライアントアプリケーション３１を接続、３）クライアントアプリケーション３１からジョブを投入する（Ｆ１）、４）そのジョブの完了後、ジョブを削除する（Ｆ２）、５）クライアントアプリケーション３１を終了させる（Ｆ３）という動作の流れを示している。なお、図７においてＨＴＴＰ通信に関する動作は太線の矢印で示す。そのうちチャンク形式転送コーディングによる通信はＤ１（ＨＴＴＰリクエスト）Ｃ２、Ｃ３、Ｃ４、Ｃ５、Ｃ６、Ｃ７(ＨＴＴＰレスポンス、チャンク形式)である。
【００６２】
以下、図７のシーケンスを詳細に説明する。
【００６３】
＜１＞プリンタコントローラ１０の起動
プリンタコントローラプログラム１１はジョブ制御部１２を立ち上げ、ジョブ制御部１２は受付スレッド１３を立ち上げる（Ｂ１）。
【００６４】
＜２＞クライアント３０の起動と接続実施
クライアントアプリケーション３１はその本体３１ａが立ち上がるとクライアント接続スレッド３２を立ち上げ（Ｅ１）、プリンタコントローラ１０の受付スレッド１３に対して接続要求を行う（Ｄ１）。
【００６５】
＜３＞接続スレッドの起動とチャンク形式データ送信の開始
プリンタコントローラ１０の受付スレッド１３は接続要求（Ｄ１）を受け、接続スレッド１６を起動する（Ｃ１）。プリンタコントローラ１０の接続スレッド１６は起動後、ジョブ制御部１２から送信データキュー１４（図７では図示省略）を通じてジョブリストを受け取り（Ｂ２）、クライアント接続スレッド３２に送信する（Ｃ２）。ここでは、接続要求に対する初回の応答なので全ジョブリストが送信される。クライアント接続スレッド３２は、プリンタコントローラ１０から受け取ったジョブリストを内部メモリに保持すると共に、このジョブリストを当該クライアント３０の液晶ディスプレイなどのＧＵＩ（Graphical User Interface）に表示する（Ｇ１）。
【００６６】
＜４＞クライアントアプリケーション３１からジョブを投入
接続完了後、ユーザの意思により、任意のタイミングでジョブが投入される（Ｆ１）。たとえば、クライアントアプリケーション３１の図示省略したジョブ投入ボタンが押されてジョブが投入される。
【００６７】
クライアントアプリケーション本体３１ａは、プリンタコントローラ１０の受付スレッド１３に対して新規ジョブ投入コマンドを送信する（Ｄ２）。このジョブ投入コマンドを受けた受付スレッド１３はジョブの投入成功／失敗を問わず、コマンドのレスポンスを返す（Ｄ３）。この例では、コマンド受け付け成功を示すレスポンスを返す。なお、ジョブ投入コマンドのパラメータに異常がある場合や、操作を許されていないユーザからのコマンドであれば失敗を意味するレスポンスが返信される。
【００６８】
クライアント接続スレッド３２からジョブ投入コマンドを受けたプリンタコントローラ１０の受付スレッド１３はジョブ制御部１２にジョブ投入コマンド（Ｄ２）を中継する（Ｂ３）。
【００６９】
ジョブ制御部１２はジョブ投入コマンドを受けると、ジョブ処理部１５を起動してそのジョブをジョブ処理部１５に投入する（Ａ１）。これによりジョブ処理部１５はそのジョブに関する処理を開始する。
【００７０】
該処理を開始したジョブ処理部１５は処理の進捗情報を逐次ジョブ制御部１２に通知する（Ａ２、Ａ３、Ａ４、Ａ５）。図７の例では簡単のため、通知Ａ２は１枚目のＲＩＰ完了を示し、通知Ａ３は２枚目のＲＩＰ完了を示し、通知Ａ４は３枚目のＲＩＰ完了を示し、通知Ａ５はジョブ完了を示すものとする。
【００７１】
各通知（Ａ２、Ａ３、Ａ４、Ａ５）を受けたジョブ制御部１２はその都度その通知を送信データキュー１４に投入して受付スレッド１３に中継する（Ｂ４、Ｂ５、Ｂ６、Ｂ７）。
【００７２】
各通知（Ｂ４、Ｂ５、Ｂ６、Ｂ７）を受けた接続スレッド１６はその都度その通知をチャンク形式のデータ（chunked data）にしてクライアント接続スレッド３２に送信する（Ｃ３、Ｃ４、Ｃ５、Ｃ６）。
【００７３】
クライアント接続スレッド３２はチャンク形式のデータを逐次受信し、このデータの内容に従って内部メモリ内のジョブリストを更新し、ＧＵＩに更新後のジョブリストを表示する（Ｇ２、Ｇ３、Ｇ４、Ｇ５）。
【００７４】
＜５＞そのジョブの完了後、ジョブの削除を実施
ジョブ完了後、ユーザの意思により、任意のタイミングでジョブＩＤ：２のジョブの削除指示を受ける（Ｆ２）。たとえば、クライアントアプリケーション３１の図示省略したジョブ削除ボタンがジョブＩＤ：２の指定状態下で押されることにより削除指示を受ける。
【００７５】
クライアントアプリケーション本体３１ａはジョブ削除コマンドをプリンタコントローラ１０の受付スレッド１３に送信する（Ｄ４）。これに対してプリンタコントローラ１０の受付スレッド１３はレスポンスを返す（Ｄ５）と共に、ジョブ削除コマンドをジョブ制御部１２に中継する（Ｂ８）。
【００７６】
ジョブ削除コマンドを受けたジョブ制御部１２は、該当のジョブの削除を行い、このジョブがジョブリストから削除された旨を送信データキュー１４経由で接続スレッド１６に通知する（Ｂ９）。
【００７７】
この通知（Ｂ９）を受けた接続スレッド１６はジョブ削除の旨をチャンク形式のデータ（chunked data）にしてクライアント接続スレッド３２に送信する（Ｃ７）。
【００７８】
これを受信したクライアント接続スレッド３２は内部メモリに保持しているジョブリストから該当するジョブを削除し、削除後のジョブリストをＧＵＩに表示して表示内容を更新する（Ｇ６）。
【００７９】
＜６＞クライアントアプリケーション３１を終了させる（Ｆ３）
終了の方法には２つのパターンがある。  
［パターン１］クライアントからの切断
ジョブ削除後、ユーザの意思により、任意のタイミングでクライアントアプリケーション３１の図示省略した終了ボタンなどが押される（Ｆ３）。クライアントアプリケーション本体３１ａはユーザによる終了ボタンの押し下げ操作を受けると、クライアント接続スレッド３２に終了を指示する（Ｅ２）。これを受けてクライアント接続スレッド３２は、プリンタコントローラ１０の接続スレッド１６との接続を切断する（Ｃ８）。切断を感知したプリンタコントローラ１０の接続スレッド１６はこの切断を通信終了の合図と判断し、自身（接続スレッド１６）を終了させる。
【００８０】
［パターン２］サーバからの切断
プリンタコントローラ１０側で何らかの理由が発生して切断する場合などがパターン２に該当する。なお、パターン２は図７に表示していない。パターン２の切断では、ＲＦＣに規定されている通り、サイズ０のチャンク形式のデータをクライアント接続スレッド３２に送信する。クライアント接続スレッド３２はサイズ０のチャンク形式のデータを受け取ると、このチャンクを通信終了の合図と認識し、ユーザにサーバがサービス中でないことを通知するなどの終了処理を行う。
【００８１】
以上のように、本実施の形態のプリンタコントローラ１０はジョブの状態をクライアントに通知する場合にチャンク形式転送コーディングを利用して接続状態を継続し続けるので、プリンタコントローラ１０（サーバ）とクライアント３０との間のジョブリストの整合性を最小限のデータ・機構・動作で保つことができる。また、本実施の形態のプリンタコントローラ１０は、ジョブの状態をクライアントに通知する場合に接続状態を継続し続けるので、再接続する手間がなく、接続のためのオーバーヘッドが低減し、いち早くデータをクライアントに送信することができる。
【００８２】
また、プリンタコントローラ１０でのジョブリストに変化が生じたタイミングでその変化内容をチャンク形式のデータでクライアント３０へ通知するので、時間的遅れが少なく、プリンタコントローラ１０側とクライアント３０側のジョブリストの整合性が良好になる。さらに、変化の差分のみを送信するので通信データ量が低減するという効果を奏する。
【００８３】
図８は、クライアント３０に表示されるジョブリスト画面４０の一例を示している。ジョブリスト画面４０には、ジョブ毎に、ジョブ状況、印刷済のページ、ジョブＩＤ、ジョブ名、ユーザ名、ジョブの受付時間の各ジョブ情報が横一列に対応付けられて一覧表示されている。接続要求に対する応答としてプリンタコントローラ１０からチャンク形式のデータを受け取る毎に、そのデータの内容に従ってジョブリスト画面４０の表示内容が更新される。
【００８４】
図９は、図１０に示すものと同一のプリンタコントローラ側のジョブリストの遷移を、本実施の形態のサーバ・クライアントシステム５によってプリンタコントローラ１０からクライアント３０へ通知した場合の通信手順およびジョブリストの表示状態の遷移を示している。本実施の形態のプリンタコントローラ１０ではジョブの状態が変化したときにその変化内容をチャンク形式のデータにして送信するので、図１０に示すものに比べて通信が簡素であり、通信量が低減している。
【００８５】
また、プリンタコントローラ１０側のジョブリストの内容が変化したとき、そのタイミングで該変化の内容をチャンク形式のデータにしてクライアント３０へ通知するので、プリンタコントローラ１０側でのジョブリストの変化がクライアント３０側のジョブリストに極めて少ない時間遅れで反映され、両者の管理するジョブリストの内容がいち早く整合される。
【００８６】
以上、本発明の実施の形態を図面によって説明してきたが、具体的な構成は実施の形態に示したものに限られるものではなく、本発明の要旨を逸脱しない範囲における変更や追加があっても本発明に含まれる。
【００８７】
たとえば、クライアント３０側でＷｅｂブラウザを利用してジョブリストを表示させる場合、通常、Ａｊａｘ（Asynchronous JavaScript + XML、（Ｊａｖａは登録商標)）を利用するが、Ａｊａｘはチャンクとして受信するデータを結合してしまうことがある。このため、チャンクデータ自体に後で分割できるような機構を設けておくとよい。具体的には、データ“ＡＢＣ”を送信する場合、絶対にデータに含まれない(ユニークな)ヘッダ/フッタを付ける。たとえば＜Ｈ＞をヘッダ／フッタとして定義し、＜Ｈ＞ＡＢＣ＜／Ｈ＞  としたデータを送信する。このようにすれば、＜Ｈ＞１２３＜／Ｈ＞＜Ｈ＞ＡＢＣ＜／Ｈ＞＜Ｈ＞７８９＜／Ｈ＞  とデータが結合していた場合でもこれを分割して利用することが可能になる。
【００８８】
なお、ＡｊａｘとはＪａｖａＳｃｒｉｐｔでＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトを利用して、ページ全体の読み込みとは非同期にサーバと通信し、ダイナミックＨＴＭＬを利用してページの必要な部分だけを書き換えるＷｅｂアプリケーションの開発手法のことである。
【００８９】
このほか、実施の形態では、プリンタコントローラ１０側のジョブリストの状態を監視対象とし、クライアント３０からの接続要求に対する応答として該監視対象に関する報告（通知）をチャンク形式転送で行うようにしたが、監視対象はこれに限定されるものではなく、時間経過によって状態の変化する対象であれば如何なる監視対象であってもかまわない。たとえば、株価１０００銘柄の変動でも戦闘機パイロットの心拍数でも原子炉冷却ポンプの回転数でも宇宙船の姿勢情報などでもかまわない。
【００９０】
実施の形態では、変化の差分データを１つのチャンクにしてクライアント３０へ送信するようにしたが、毎回、全ジョブリストを送信してもよい。
【００９１】
クライアント３０でのジョブリストの表示は、Ｗｅｂブラウザによる表示に限定されず、専用アプリケーションなどを使用して表示されてもかまわない。
【図面の簡単な説明】
【００９２】
【図１】本発明の実施の形態に係るサーバ・クライアントシステムのハードウェアの概略構成を示すブロック図である。
【図２】本発明の実施の形態に係るサーバ・クライアントシステムの機能上の概略構成を示すブロック図である。
【図３】プリンタコントローラの受付スレッドの動作を示すフローチャートである。
【図４】プリンタコントローラの接続スレッドの動作を示すフローチャートである。
【図５】プリンタコントローラのジョブ制御部の動作を示すフローチャートである。
【図６】クライアントアプリケーションの動作を示すフローチャートである。
【図７】サーバ・クライアントシステムの動作シーケンスを例示した説明図である。
【図８】クライアントに表示されるジョブリスト表示画面の一例を示している。
【図９】本実施の形態に係るプリンタコントローラからクライアントへジョブリスト通知する際の通信手順およびジョブリストの表示状態の遷移を例示した説明図である（図１０に対応）。
【図１０】従来のプリンタコントローラからクライアントへジョブリスト通知する際の通信手順およびジョブリストの表示状態の遷移を例示した説明図である。
【符号の説明】
【００９３】
２…ネットワーク
５…サーバ・クライアントシステム
１０…プリンタコントローラ
１１…プリンタコントローラプログラム
１２…ジョブ制御部
１３…受付スレッド
１４…送信データキュー
１５…ジョブ処理部
１６…接続スレッド
３０…クライアント
３１…クライアントアプリケーション
３１ａ…クライアントアプリケーション本体
３２…クライアント接続スレッド
４０…ジョブリスト画面
Ｈ…通信セット
Ｐ１…受付スレッドとクライアントアプリケーション間の接続
Ｐ２…受付スレッドとジョブ制御部間の接続
Ｐ３…ジョブ処理部とジョブ制御部間の接続
Ｐ４…ジョブ制御部と送信データキュー間の接続
Ｐ５…送信データキューと接続スレッド間の接続
Ｐ６…接続スレッドとクライアントアプリケーション間の接続
【図１】
2008225718.tif 000003
【図２】
2008225718.tif 000004
【図３】
2008225718.tif 000005
【図４】
2008225718.tif 000006
【図５】
2008225718.tif 000007
【図６】
2008225718.tif 000008
【図７】
2008225718.tif 000009
【図８】
2008225718.tif 000010
【図９】
2008225718.tif 000011
【図１０】
2008225718.tif 000012