[実施例1]
[システム構成]
以下、本発明の実施形態について、図面を参照して説明する。図1は、本実施形態に係る通信システム100の構成を示す図である。本実施形態の通信システム100は、中継装置101、クライアント装置102、クライアント装置103、及びサーバ装置104を有する。クライアント装置102及びクライアント装置103は中継装置101を介してサーバ装置104と有線または無線で接続され、相互に通信を行って、例えば静止画や動画等のコンテンツデータやイベント通知コマンドなどを送受信する。なお、図1に示す通信システム100内には2台のクライアント装置が存在するが、中継装置101に接続されるクライアント装置の数はこれに限らず、3台以上であってもよい。また、中継装置101に接続されるサーバ装置104も、2台以上であってもよい。
本実施形態において、クライアント装置102とクライアント装置103はHTTP/2(Hypertext Transfer Protocol version 2)において規定されるクライアントとして動作する。一方、中継装置101はHTTP/2において規定されるサーバとして動作する。即ち、クライアント装置102及びクライアント装置103は中継装置101にHTTPリクエストを送信し、中継装置101は受信したHTTPリクエストに応じてクライアント装置102及びクライアント装置103にHTTPレスポンスを送信する。
サーバ装置104は、クライアント装置102及びクライアント装置103に対して、中継装置101を介してデータを送信することによりプッシュサービスを提供する。プッシュサービスの実現のために、中継装置101からクライアント装置102及びクライアント装置103へのデータの転送には、例えばHTTP/2の機能としてのサーバープッシュなどプッシュ型のデータ送信方法が用いられる。なお、サーバ装置104は中継装置101との通信においては、HTTP/1.1(Hypertext Transfer Protocol version 1.1)において規定されるクライアントとして動作する。そして中継装置101は、サーバ装置104との通信においてHTTP/1.1において規定されるサーバとして動作する。具体的には、サーバ装置104は中継装置101にPOSTメソッドなどのリクエストを送信し、プッシュによる送信の対象となるデータを中継装置101にアップロードする。
中継装置101は具体的には、PC、ネットワークスイッチ、及びルータなどの通信装置である。クライアント装置102及びクライアント装置103は具体的には、デジタルカメラ、ネットワークカメラ、プリンタ、複合機、テレビ、プロジェクタ、携帯電話、スマートフォン、及びPCなどのクライアント装置である。また、サーバ装置104の具体例も、クライアント装置102及びクライアント装置103と同様である。ただし、通信システム100内の各装置の形態はこれらに限定されない。
クライアント装置102、クライアント装置103、及びサーバ装置104と中継装置101とは、例えばLAN(Local Area Network)やWAN(Wide Area Network)、又はそれらの組み合わせにより接続される。LANとしては、Ethernet(登録商標)に則った有線LANや、IEEE(Institute of Electrical and Electronics Engineers)802.11シリーズに則った無線LANなどが用いられる。WANとしては、例えばインターネットなどが用いられる。また、Bluetooth(登録商標)やZigbee(登録商標)など他の通信方式に基づいて接続されてもよい。
クライアント装置102とクライアント装置103との間、及びクライアント装置102とサーバ装置104との間でもデータのやり取りが行われる。本実施形態ではこのデータのやり取りがLANやWANを介した通信により行われる場合を中心に説明するが、データのやり取りの方法はこれに限らない。例えば、一方の装置に表示させた画像やQRコード(登録商標)を他方の装置により読み取ることでデータをやり取りしてもよいし、一方の装置に表示された情報をユーザが他方の装置に入力してもよい。また、クライアント装置102やサーバ装置104などが不図示の情報管理装置に対するデータの登録、削除、及び更新などを行うことにより、情報管理装置を介したデータのやり取りが行われてもよい。情報管理装置は、例えば、クラウド上やサーバ上で管理されるソフトウェアであってもよい。情報管理装置を介したデータのやり取りが行われる場合には、情報管理装置にアクセスするための識別子や鍵情報がクライアント装置102とサーバ装置104との間でやり取りされてもよい。
本実施形態において、中継装置101はWebPushプロトコルにおいて規定されるPS(PushService)の機能を持つ。また、クライアント装置102とクライアント装置103はWebPushプロトコルにおいて規定されるUA(UserAgent)の機能を持つ。そして、サーバ装置104はWebPushプロトコルにおいて規定されるAS(ApplicationService)の機能を持つ。
通信システム100の基本的な動作としては、以下のようになる。すなわち、クライアント装置102及びクライアント装置103が中継装置101にデータの転送要求を行い、サーバ装置104が中継装置101へプッシュによる送信の対象となるデータを送信する。そして中継装置101が、サーバ装置104からのデータの受信に応じたタイミングで、転送要求を行った中継装置へ当該データを転送する。また中継装置101は、転送したデータを受信したことを示す確認応答をクライアント装置102及びクライアント装置103から受け取ると、送達確認の通知をサーバ装置104に送信する。本実施形態において、送達確認の通知はWebPushプロトコルにおいて規定されるプッシュメッセージレシート(以降、レシート)として送信されるものとする。ただし通知の形式はこれに限定されず、データが正しくクライアント装置に送達されたことをサーバ装置104が知ることができる方法で通知が行われればよい。各装置の詳細な動作については後述する。
通信システム100の具体的な例としては、以下のようなものがある。クライアント装置102はスマートフォンであり、サーバ装置104はネットワークカメラである。クライアント装置102は中継装置101に転送要求を行い、サーバ装置104からの撮影画像の送信を待ち受ける。サーバ装置104は、カメラにより監視エリアを撮影し、監視エリアにおける異常を検知した場合に撮影画像を中継装置101に送信する。そして中継装置101は、サーバ装置104から送信された撮影画像をクライアント装置102に転送する。これにより、クライアント装置102のユーザは、監視エリアにおいて検知された異常を知り、監視エリアの撮影画像を確認することができる。
ここで、中継装置101からのデータの転送先がクライアント装置102だけである場合、中継装置101はクライアント装置102から確認応答を受け取った際にサーバ装置104にレシートを送信すればよい。一方、中継装置101からのデータの転送先がクライアント装置102とクライアント装置103のように複数である場合も考えられる。この場合には、中継装置101が最初に確認応答を受け取った際にのみサーバ装置104にレシートを送信すると、すべての転送先にデータが送達されたか否かをサーバ装置104が判断するのは困難である。そこで、本実施形態においては、中継装置101が複数の転送先から確認応答を受け取った後でサーバ装置104に送達確認の通知を送信することで、当該複数の転送先へデータが送達されたことをサーバ装置104が判断できるようにする。
また、中継装置101が複数のクライアント装置のそれぞれから確認応答を受信するたびにサーバ装置104に同様のレシートを送信することも考えられる。ただしこの場合にも、中継装置101が管理している転送先のクライアント装置の数をサーバ装置104が把握していないと、すべての転送先へデータが送達されたかをサーバ装置104が判断するのは困難である。そこで、本実施形態で説明するように、中継装置101が複数の転送先から確認応答を受信した後に特定の送達確認の通知をサーバ装置104に送信することで、当該複数の転送先へデータが送達されたかをサーバ装置104が判断することを容易にできる。
そしてサーバ装置104は、中継装置101から送達確認の通知を受信すると、例えばクライアント装置102及びクライアント装置103へ送信すべき次のデータを中継装置101へ送信する。一方、中継装置101から所定期間内に送達確認の通知を受信しなかった場合や、中継装置101からエラーレスポンスを受信した場合には、データの再送などのエラー処理を行う。また、データの送達に失敗した原因がエラーレスポンスと共に中継装置101からサーバ装置104へ通知されるような場合には、サーバ装置104は、通知された失敗の原因が解消されるように送信データの種別やサイズなどを制御してもよい。
[装置構成]
図2は、中継装置101のハードウェア構成を示すブロック図である。なお、クライアント装置102、クライアント装置103、及びサーバ装置104も、中継装置101と同様の構成である。中継装置101は、CPU201、ROM202、RAM203、補助記憶装置204、表示部205、操作部206、通信部207、及びバス208を有する。
CPU201は、ROM202やRAM203に格納されているコンピュータプログラムやデータを用いて中継装置101の全体を制御する。ROM202は、変更を必要としないプログラムやパラメータを格納する。RAM203は、補助記憶装置204から供給されるプログラムやデータ、及び通信部207を介して外部から供給されるデータなどを一時記憶する。補助記憶装置204は、例えばハードディスクドライブ等で構成され、静止画や動画などのコンテンツデータを記憶する。
表示部205は、例えば液晶ディスプレイやLED等で構成され、ユーザが中継装置101を操作するためのGUI(Graphical User Interface)やエラー情報などを表示する。操作部206は、例えばキーボードやマウス、タッチパネル等で構成され、ユーザによる操作を受けて各種の指示をCPU201に入力する。通信部207は、クライアント装置102やクライアント装置103、サーバ装置104などの外部の装置と通信を行う。中継装置101が外部の装置と有線で接続される場合には、例えばLANケーブル等が通信部207に接続される。また、中継装置101が外部の装置と無線通信する機能を有する場合、通信部207はアンテナ等を備える。バス208は、中継装置101の各部を繋いで情報を伝達する。
なお、本実施形態ではCPU201がプログラムを実行することで通信部207を介した中継装置101と外部の装置との通信を制御するが、中継装置101と外部の装置との通信の少なくとも一部を通信部207がハードウェア処理により制御してもよい。また、本実施形態では表示部205と操作部206は中継装置101の内部に存在するが、表示部205及び操作部206の少なくとも一方が中継装置101の外部に別の装置として存在していてもよい。この場合、CPU201が、表示部205を制御する表示制御部、及び操作部206を制御する操作制御部として動作する。
[通信シーケンス]
以下、本実施形態における通信システム100内における通信のシーケンスについて、詳細に説明する。図3は、サーバ装置104が中継装置101を介してクライアント装置102及びクライアント装置103にデータをプッシュにより送信する際のシーケンスである。図3に示すシーケンスは、クライアント装置102、クライアント装置103、及びサーバ装置104のそれぞれと中継装置101との間の接続が確立されたタイミングで開始される。ただし、図3の処理の開始タイミングは上記タイミングに限定されない。図3に示す各通信処理は、通信システム100内の各装置のCPU201が通信部207などを制御することで実行される。
M1301において、クライアント装置102は中継装置101にサブスクライブ(識別子の情報要求)を行う。中継装置101はクライアント装置102からのサブスクライブを受け付け、WebPushプロトコルにおいて規定されるプッシュURIとそれに対応するプッシュメッセージサブスクリプションURI(以降、サブスクリプションURI)を生成する。生成されたプッシュURIとサブスクリプションURIは、図12(a)に示す識別子リストのような形式で中継装置101のRAM203に保存される。
プッシュURI及びサブスクリプションURIは、中継装置101がサーバ装置104から送信されるデータの転送先を特定するために用いる識別子であり、要求に応じて中継装置101により生成(発行)される発行情報である。なお、これらの識別子はサブスクライブに応じて生成されるものに限らず、予め中継装置101が保持していた識別子の中からサブスクライブに応じて決定されたものであってもよい。本実施形態では識別子をURI(UniformResourceIdentifer)としているが、UUID(UniversallyUniqueIdetifer)のような他の形態の識別子であってもよい。また、本実施形態ではプッシュURIとサブスクリプションURIという2種類の情報が用いられる場合を中心に説明するが、これに限らず、1種類の情報を用いて転送対象のデータや転送先が特定されてもよい。すなわち、以下の説明におけるプッシュURIとサブスクリプションURIとが同一の情報であってもよい。
本実施形態では、サブスクライブがHTTP/1.1のPOSTメソッドを用いて行われるものとするが、例えばGETメソッドの様な別メソッドが用いられてもよいし、FTPやWebsocketなどの他通信規格に従う通信が用いられても良い。また本実施形態では、プッシュURIとサブスクリプションURIという2つの識別子がクライアント装置102からのサブスクライブに応じて中継装置101により生成される場合について説明するが、これに限らない。例えば、プッシュURIのみが生成されてもよいし、プッシュURIとサブスクリプションURIに加えてWebpushプロトコルにおいて規定されるプッシュメッセージサブスクリプション・セットURIが生成されてもよい。
M1302において、中継装置101は、M1301におけるクライアント装置102からの要求に応じて、M1301で生成されたプッシュURIとサブスクリプションURIを含むレスポンスを送信する。クライアント装置102はレスポンスを受信し、受信したレスポンスに含まれるプッシュURIとサブスクリプションURIをRAM203などに保存する。本実施形態ではこのレスポンスにおけるステータスコードを201Createdとしているが、これに限らなくてもよい。
M1303において、クライアント装置102はクライアント装置103に、M1302で受信したプッシュURIとサブスクリプションURIを送信する。クライアント装置103はプッシュURIとサブスクリプションURIを受信し、プッシュURIとサブスクリプションURIをRAM203などに保存する。
M1304において、クライアント装置102はサーバ装置104にプッシュURIを送信する。サーバ装置104はプッシュURIを受信し、プッシュURIをRAM203などに保存する。なお、図3の例ではHTTP/1.1に従う通信を用いてクライアント装置102からサーバ装置104へのプッシュURIの受け渡しを行っているが、すでに説明した通り、データの受け渡しの方法はこれに限定されない。例えば、サーバ装置104はプッシュURIを他の通信プロトコルを用いて受信してもよいし、クライアント装置102の表示部205に表示された画像やQRコードを用いて受信してもよいし、情報管理装置を介して受信してもよい。また、ユーザがサーバ装置104の操作部206を操作してプッシュURIを入力してもよい。なお、M1303におけるデータの受け渡しについても同様である。
M1305において、クライアント装置102は中継装置101に、M1302で中継装置101から受信したサブスクリプションURIを含む転送要求を送信する。この転送要求の送信により、クライアント装置102は、中継装置101によるプッシュ型のデータ送信を要求する。中継装置101は転送要求を受信し、受信した転送要求に含まれるサブスクリプションURIがRAM203内の識別子リストに保存済みのサブスクリプションURIと合致することを確認する。そして中継装置101は、そのサブスクリプションURIに対応するプッシュURIと、転送要求の送信元であるクライアント装置102のデバイス情報とを、図12(b)に示すプッシュ配信リストのような形式でRAM203に保存する。M1306において、クライアント装置103は中継装置101に、M1303でクライアント装置102から受信したサブスクリプションURIを含む転送要求を送信する。中継装置101はM1305の処理と同様に、転送要求を受信し、プッシュURIとデバイス情報をプッシュ配信リストに保存する。
すなわち、M1305及びM1306において中継装置101は、同一のサブスクリプションURIを含む2つの転送要求を、クライアント装置102とクライアント装置103の2つの装置から受信する。そして、中継装置101が保持するプッシュ配信リストにおいては、図12(b)に示すように、同一のプッシュURIに複数のデバイス情報が対応付けられる。
M1307において、サーバ装置104は中継装置101に対して、以降にサーバ装置104から送信されるデータ(例えばM1311において送信される配信メッセージ)に対応する送達確認の通知を行うことを要求する。M1308において、中継装置101は、M1307において受け付けた通知要求に応じてレシートサブスクリプションURIとプッシュメッセージURIを生成する。そして中継装置101は、通知要求に対するレスポンスとして、生成したレシートサブスクリプションURIとプッシュメッセージURIを、HTTPのステータスコード(例えば200Accepted)と共にサーバ装置104へ送信する。ただし、通知要求に対するレスポンスとして中継装置101からサーバ装置104へ送信される情報はこれらに限らず、プッシュメッセージURIのみが送信されてもよいし、別の識別子が送信されてもよい。なお、中継装置101は、送達確認の通知を行うことを拒否する場合には、別のステータスコード(例えば400や404など)を送信する。
M1309において、サーバ装置104は、レシートをプッシュ型のデータ送信により中継装置101から受け取るためのレシート要求を行う。このレシート要求は、例えばHTTPのGETメソッドによりサーバ装置104から中継装置101へ送信され、レシートにより送達を確認する対象となるデータに対応するプッシュURIがレシート要求に含まれる。また、サーバ装置104から送信されるレシート要求には、M1308において中継装置101から取得したレシートサブスクリプションURIと、プッシュポリシーとが含まれる。プッシュポリシーは、中継装置101がサーバ装置104から受信したデータの転送先とすべきクライアント装置の数などを指定するための指定情報である。プッシュポリシーは例えばレシート要求のHTTPヘッダのフィールドにPUSH−MODE:allといった形で記載されていてもよいし、ボディ部分に記載されていてもよい。ここで、PUSH−MODEはプッシュの方式を示すための拡張HTTPヘッダであり、allはサブスクライブしている全てのクライアント装置にデータをプッシュすることを示している。
中継装置101はサーバ装置104からレシート要求を受信すると、図12(c)に示すようなプッシュポリシーリストを生成する。レシート要求に含まれるプッシュURIをキーとして、レシート要求の送信元であるサーバ装置104のデバイス情報、レシート要求に含まれるレシートサブスクリプションURI、及びプッシュポリシーが同一エントリとして対応付けられてリストに保存される。また、M1308において当該レシートサブスクリプションURIと共に生成されたプッシュメッセージURIも同一エントリに保存される。プッシュポリシーの詳細については後縦する。
M1310において、中継装置101はサーバ装置104に、M1309において受信したレシート要求に含まれるレシートサブスクリプションURIに対応するプッシュURIを含むプッシュ予約を送信する。プッシュ予約の送信により、後にレシートがサーバ装置104へプッシュされることが通知される。図3の例では、ストリーム番号が82のストリームを用いてレシートをプッシュすることを予約するためのPUSH_PROMISEフレームが、ストリーム番号が13のストリームを用いて送信される。ストリームやPUSH_PROMISEフレームは、HTTP/2に従う通信において使用されることが標準規格で規定されている。
M1311において、サーバ装置104は中継装置101に、M1304でクライアント装置102から受信したプッシュURIを含む配信メッセージを送信する。中継装置101はサーバ装置104からプッシュURIを含む配信メッセージを受信し、受信した配信メッセージに含まれるプッシュURIがRAM203内の識別子リストに保存済みのプッシュURIと合致することを確認する。合致する場合の当該配信メッセージは、当該プッシュURIと対応するサブスクリプションURIを含む転送要求の送信元であるクライアント装置へ転送すべきデータである。M1312において、中継装置101はサーバ装置104に、プッシュのリクエストを受け付けたことを示す配信レスポンスを送信し、サーバ装置104は配信レスポンスを受信する。
M1313において、中継装置101は、RAM203に保存されているプッシュ配信リストから、M1311で受信した配信メッセージに含まれるプッシュURIに対応するデバイス情報を検索する。そして中継装置101は、該当したデバイス情報から特定されるクライアント装置102に、そのプッシュURIを含むプッシュ予約を送信する。プッシュ予約の送信により、後にメッセージがプッシュ通知により送信されることが送信先に通知される。クライアント装置102はプッシュ予約を受信し、中継装置101からプッシュメッセージを受信するまで待機する。
M1314において、中継装置101はクライアント装置102にプッシュメッセージを送信する。クライアント装置102はプッシュメッセージを受信する。このプッシュメッセージは、M1305における転送要求に応じて中継装置101からクライアント装置102へプッシュにより送信されるメッセージである。すなわち、クライアント装置102からのリクエストに依存しないタイミングで中継装置101からプッシュメッセージが送信される。ただし、M1314におけるプッシュ型のデータ送信の代わりに、中継装置101はクライアント装置102からのリクエストを待ってメッセージを送信してもよい。
ここで中継装置101から送信されるプッシュメッセージは、S1311においてサーバ装置104から送信された配信メッセージに応じた情報である。またこのプッシュメッセージは、配信メッセージに含まれるプッシュURIに対応するサブスクリプションURIを含むM1305における転送要求に応じて中継装置101により転送される情報でもある。なお、配信メッセージとプッシュメッセージは同一のデータを含んでいてもよいし、異なるデータを含んでいてもよい。M1315において、クライアント装置102は中継装置101に、プッシュメッセージを受信したことを示す確認応答としてのプッシュレスポンスを送信する。中継装置101はプッシュレスポンスを受信する。
M1316において、中継装置101はサーバ装置104に、M1310において予約されたストリームを用いてステータスコードが100CONTINUEのレシートをプッシュ型のデータ送信により送信する。ここで送信されるステータスコードが100CONTINUEのレシートは、プッシュメッセージが転送先であるクライアント装置102及びクライアント装置103のうちの一方にのみ送達されたことを示す暫定応答である。ここで送信されるレシートには、プッシュメッセージが送達されたクライアント装置102を特定するための情報などが含まれてもよい。これにより、サーバ装置104はどのクライアント装置へデータが送達されたかを把握することができる。
M1317において、中継装置101はM1313と同様に、M1311で受信した配信メッセージに含まれるプッシュURIに対応するデバイス情報から特定されるクライアント装置103に、そのプッシュURIを含むプッシュ予約を送信する。クライアント装置103はプッシュ予約を受信し、中継装置101からプッシュメッセージを受信するまで待機する。
M1318において、中継装置101はクライアント装置103にプッシュメッセージを送信し、クライアント装置103はプッシュメッセージを受信する。ここで送信されるプッシュメッセージは、S1311においてサーバ装置104から送信された配信メッセージに応じた情報である。なお、S1318において送信されるプッシュメッセージとM1314において送信されるプッシュメッセージは同一であってもよいし、送信先に応じて異なるデータを含んでいてもよい。M1319において、クライアント装置103は中継装置101に確認応答としてのプッシュレスポンスを送信し、中継装置101はプッシュレスポンスを受信する。
M1320において、中継装置101はサーバ装置104に、M1310において予約されたストリームを用いてステータスコードが204NoContentのレシートをプッシュ型のデータ送信により送信する。ここで送信されるステータスコードが204NoContentのレシートは、プッシュメッセージが転送先であるクライアント装置102及びクライアント装置103の両方に送達されたことを示す送達確認通知である。ここで送信されるレシートには、プッシュメッセージが送達されたすべての転送先(クライアント装置102及びクライアント装置103)を特定するための情報などが含まれてもよい。これにより、サーバ装置104は最終的にどのクライアント装置へデータが送達されたかを把握することができる。
以上で通信システム100における一連の通信が終了する。図3を用いて説明したシーケンスの要点をまとめると、以下のようになる。サーバ装置104は、クライアント装置102及びクライアント装置103へ転送されるべきデータを中継装置101へ送信する(M1311)。中継装置101は、サーバ装置104から受信したデータをクライアント装置102及びクライアント装置103へ転送する(M1314及びM1318)。そして中継装置101は、転送されたデータの受信が完了したことを示す確認応答をクライアント装置102とクライアント装置103の両方から受信した後に、データの送達確認の通知をサーバ装置104に送信する(M1320)。
このように、本実施形態の通信システム100によれば、中継装置101がデータの転送先である複数のクライアント装置から確認応答を受信した後に、当該データの送達確認の通知がサーバ装置104へ送信される。これにより、すべての転送先にデータが送達されたかをサーバ装置104が判断できるようになる。
また中継装置101は、M1316のように、転送先である複数のクライアント装置のうちの一部のクライアント装置から確認応答を受信した後に、暫定応答をサーバ装置104へ送信してもよい。このように、送達確認の通知とは異なる通知である暫定応答を送信することで、一部の転送先にデータが送達されたことをサーバ装置104が判断できる。すなわち、暫定応答が送信された時点ではすべての転送先へのデータの送達は未完了であることをサーバ装置104が判断できる。なお、中継装置101は暫定応答を送信せずに送達確認の通知だけを送信してもよい。こうすることで、中継装置101が転送先から確認応答を受信するたびに暫定応答を送信する場合と比較して、中継装置101とサーバ装置104との間の通信量を低減することができる。
また、中継装置101は、暫定応答と送達確認の通知という2種類の通知を送信するものに限らず、データの転送先のクライアント装置の種別や送達が完了した転送先の数などに応じて、3種類以上の通知をサーバ装置104へ送信してもよい。また、中継装置101は、転送先のクライアント装置それぞれから確認応答を受信するたびに、同様の通知をサーバ装置104へ送信してもよい。図3の例で言えば、M1316で送信される暫定応答とM1320で送信される送達確認の通知とが同様のメッセージであってもよい。この方法でも、特にサーバ装置104が転送先のクライアント装置の数を把握している場合には、サーバ装置104は中継装置101から受信した通知の数を判定することで、転送先のクライアント装置すべてへデータが送達されたかを判断することができる。
サーバ装置104が転送先のクライアント装置の数を把握する方法としては、例えば中継装置101が、受信した転送要求の数をサーバ装置104へ送信してもよいし、クライアント装置から転送要求を受信するたびにサーバ装置104に通知を行ってもよい。そして、クライアント装置から中継装置101へアンサブスクライブ(転送要求の取り消し)が行われた際にも、その旨を中継装置101がサーバ装置104へ通知してもよい。また例えば、サーバ装置104がクライアント装置102からプッシュURIを取得する際に、クライアント装置102が識別子を共有する別のクライアント装置(図3の例におけるクライアント装置103)の数も併せて取得してもよい。
また、図3のシーケンスにおいては、中継装置101が受信した転送要求の送信元のすべて(クライアント装置102及びクライアント装置103)がデータの転送先となる場合を示した。ただしこれに限らず、中継装置101は転送要求の送信元のうちの一部にのみデータを転送してもよい。そして、中継装置101が転送要求の送信元のすべてにデータを転送するか一部にのみ転送するかを、サーバ装置104がプッシュポリシーにより指定してもよい。
例えば、図12(c)に示すプッシュポリシーリストにおいて、サーバ装置104対応するプッシュポリシーはallとなっている。この場合、中継装置101は、転送要求を行ったクライアント装置を図12(b)のプッシュ配信リストから検索し、該当するクライアント装置のすべてにプッシュメッセージを送信する。
一方、中継装置101が、サーバ装置104とは別のサーバ装置105から、プッシュポリシーとしてanyが指定されたレシート要求を受信した場合を考える。この場合には、中継装置101は、サーバ装置105から送信されるデータについての転送要求を行ったクライアント装置のうち、何れか1つにのみプッシュメッセージを送信する。そして中継装置101は、プッシュメッセージの送信先のクライアント装置から確認応答を受信した後に、サーバ装置105に送達確認の通知を送信する。この方法によれば、転送要求を行った機器のうちの何れか1つにのみプッシュ通知が届けばよい場合に、プッシュメッセージに係る通信量や中継装置101の処理負荷を低減できる。例えば、同一のユーザが所有するスマートフォン、スマートウォッチ、タブレットといった複数の機器から転送要求が行われる場合に、そのうちの1つにプッシュ通知が届けば、ユーザがその通知を確認することができる。なおこの場合に、複数の機器に優先度を設定しておき、中継装置101は設定された優先度の高い機器にデータを転送してもよい。
また、プッシュポリシーの内容はこれらに限らず、例えば転送要求を行ったクライアント装置のうちデータの転送先とするクライアント装置の数を指定するものであってもよい。また例えば、転送要求を行った複数のクライアント装置にデータを転送し、転送先のクライアント装置のうちの一部のクライアント装置から中継装置101が確認応答を受信した後に送達確認の通知を送信することを指定するものであってもよい。そして中継装置101は、転送先である複数のクライアント装置すべてから確認応答を受信した後に送達確認の通知を送信するか、一部のクライアント装置から確認応答を受信した後に送達確認の通知を送信するかを、プッシュポリシーに基づいて決定してもよい。この場合、中継装置101は、プッシュポリシーに基づく決定に応じたタイミングで送達確認の通知をサーバ装置104に送信する。またサーバ装置104は、中継装置101が送達確認の通知の前に暫定応答を送信するか否かを指定してもよい。例えば、サーバ装置104はM1309におけるレシート要求のヘッダにExpect:100−Continueを含めることで暫定応答を要求してもよい。
また、中継装置101がどのクライアント装置へデータを転送するかの決定には、プッシュポリシー以外の情報も用いられてもよい。例えば、プッシュポリシーがanyである場合に、中継装置101は、転送要求を行った複数のクライアント装置がデータを受信可能な状態であることを把握している場合には、上述のように何れかのクライアント装置にデータを送信する。一方、転送要求を行った複数のクライアント装置がデータを受信可能であるか不明である場合には、中継装置101は、複数のクライアント装置にデータを転送し、何れかのクライアント装置から確認要求を受信したことに応じて送達確認の通知を送信してもよい。これにより、クライアント装置の状態に応じたより適切なデータ転送処理が実現できる。
[装置の動作フロー]
次に、通信システム100内の各装置の動作フローについて説明する。なお、図4から図11を用いて以下で説明する処理は、各装置のCPU201がROM202に格納されたプログラムをRAM203に展開して実行することで実現される。ただし、以下で説明する処理の少なくとも一部が、CPU201とは異なる専用のハードウェアにより実現されてもよい。
図4は、中継装置101が識別子を生成する際の処理を説明するためのフローチャートである。図4に示す処理は、中継装置101がクライアント装置102もしくはクライアント装置103から識別子要求(サブスクライブ)を受信するタイミングで開始される。S501において、中継装置101は、クライアント装置102もしくはクライアント装置103から識別子要求を受信する。S502において、中継装置101は、識別子としてサブスクリプションURIとプッシュURIを生成する。S503において、中継装置101は、S501での識別子要求の送信元であるクライアント装置102もしくはクライアント装置103に識別子を送信する。S504において、中継装置101はS502で生成した識別子を図12(a)に示すRAM203内の識別子リストに保存する。
図5は、中継装置101が転送要求を受信した際の処理を説明するためのフローチャートである。図5に示す処理は、中継装置がクライアント装置102もしくはクライアント装置103から転送要求を受信するタイミングで開始される。S601において、中継装置101は、クライアント装置102もしくはクライアント装置103から識別子を含む転送要求を受信する。S602において、中継装置101は、S601で受信した識別子とS504で識別子リストに保存した識別子を比較し、受信した識別子が識別子リストに含まれている場合はS603に進み、含まれていない場合はS604に進む。
S603において、中継装置101は、S601で受信した転送要求の送信元であるクライアント装置のデバイス情報を図12(b)に示すRAM203内のプッシュ配信リストに保存する。本実施形態におけるデバイス情報は、中継装置101がクライアント装置を一意に特定することができる情報である。具体的には、クライアント装置の機器ID、MACアドレス、又はクライアント装置と中継装置との間のコネクションの識別情報などである。S604において、中継装置101は、S601での転送要求の送信元であるクライアント装置102もしくはクライアント装置103にエラーレスポンスを送信する。
図6は、中継装置101がクライアント装置102及びクライアント装置103にプッシュメッセージを送信する処理を説明するためのフローチャートである。図6に示す処理は、中継装置101がサーバ装置104から配信メッセージを受信するタイミングで開始される。S701において、中継装置101はサーバ装置104から識別子を含む配信メッセージを受信する。S702において、中継装置101は、S701で受信した識別子とS504で識別子リストに保存した識別子を比較し、受信した識別子が識別子リストに含まれている場合はS703に進み、含まれていない場合はS704に進む。
S703において、中継装置101は、図12(c)に示すプッシュポリシーリストから、S701において受信した配信メッセージのプッシュURIに対応するプッシュポリシーを確認する。そしてS705において、中継装置101はサーバ装置104に配信レスポンスを送信する。一方、S704においては、中継装置101はサーバ装置104にエラーレスポンスを送信し、図6の処理を終了する。
S706において、中継装置101はS703で確認したプッシュポリシーに応じて、プッシュメッセージの転送先を決定する。例えば、プッシュポリシーがallであり、中継装置101がS701で受信した配信メッセージに対応する転送要求を複数のクライアント装置から受信していた場合、当該複数のクライアント装置すべてが転送先として決定される。一方、プッシュポリシーがanyだった場合、中継装置101は、受信した転送要求の送信元である複数のクライアント装置のうち何れか1つのクライアント装置を転送先として決定する。また、プッシュポリシーにより転送先の数が指定されている場合、指定に応じた数のクライアント装置が転送先として決定される。
S707において、中継装置101は、S603で保存したプッシュ配信リストにおいてS701で受信した識別子と対応するデバイス情報のうち、S705で決定された転送先それぞれについて、S708からS711の処理を行う。S708において、中継装置101は、対象のデバイス情報に対応するクライアント装置にプッシュ予約を送信する。S709において、中継装置101は、対象のデバイス情報に対応するクライアント装置にプッシュメッセージを送信する。S710において、中継装置101は、S709でのプッシュメッセージの転送先のクライアント装置からプッシュレスポンスを受信する。S711において、中継装置101はサーバ装置104に暫定応答(HTTP 100Continue)を送信する。この暫定応答には、例えばFQDN(Fully Qualified Domain Name)やIPアドレスその他の識別子を用いて、どのクライアント装置からプッシュレスポンスを受信したかの情報を含めてもよい。
S701で受信されたプッシュURIと対応する複数のデバイス情報が転送先として決定されている場合、S708からS711において中継装置101は、S701において受信した配信メッセージを転送先の決定に応じた複数のクライアント装置へ転送する。ここで、同一のプッシュURIと対応する複数のデバイス情報が転送先となっている場合とは、すなわち中継装置101が同一のサブスクリプションURIに基づく転送要求を転送先に決定された複数のクライアント装置から受信していた場合である。
すべての転送先についてS708からS711の処理が終了すると、S712において中継装置101は、すべての転送先にプッシュメッセージが送達されたことを示す送達確認通知をサーバ装置104に送信し、処理を終了する。また、中継装置101は、指定されたプッシュポリシーに合致したプッシュメッセージの送達に失敗した場合や、送達の完了前にタイムアウトした場合などには、S712において送達確認の通知に代えてエラーレスポンスを送信する。エラーレスポンスには、データが送達されたクライアント装置の識別情報や、データを送達できなかったクライアント装置の識別情報、データの送達に失敗した原因を示す情報などが含まれていてもよい。なお、S711における暫定応答の送信は、一部の転送先についてのみ行われてもよい。例えば、中継装置101は、複数の転送先から送信されるプッシュレスポンスのうち最後のプッシュレスポンスを受信した場合には、S711における暫定応答の送信を行わずに、S712における送達確認の通知の送信を行ってもよい。また、サーバ装置104が転送先のクライアント装置の数を把握している場合などには、中継装置101は、S712における送達確認の通知の送信を行わず、S711における暫定応答の送信のみを行ってもよい。
また、複数の転送先のうち一部(n個)の転送先にプッシュメッセージが送達された場合に送達確認を通知するようにプッシュポリシーにより指定された場合には、中継装置101は、すべての転送先についてS708からS711までの処理を並列処理する。そして、S710で受信するプッシュレスポンスの数を確認し、n個に達するとループを抜け、S712で送達確認の通知が送信される。プッシュポリシーにより転送先のクライアント装置が指定される場合においても、同様な処理を行うことでプッシュポリシーに応じたプッシュメッセージの送信が実現できる。
図7は、クライアント装置102が中継装置101から識別子を受信し、クライアント装置103及びサーバ装置104に識別子を送信する処理を説明するためのフローチャートである。図7に示す処理は、例えばクライアント装置102にユーザの操作などによって識別子要求の指示がなされたタイミングで開始される。ただし、図7に示す処理の開始タイミングは上記タイミングに限定されない。
S801において、クライアント装置102は中継装置101に識別子要求を送信する。S802において、クライアント装置102は中継装置101から識別子を受信する。S803において、クライアント装置102は自装置が有するRAM203内の識別子リストにS802で受信した識別子を保存する。S804において、クライアント装置102は、送信対象装置それぞれについてS805の処理を行う。本実施形態における送信対象装置はクライアント装置103及びサーバ装置104を指すが、これに限らない。例えば、識別子を管理するための情報管理装置(不図示)を送信対象装置とし、クライアント装置102は他の装置との間の識別子のやり取りを、情報管理装置を介して行ってもよい。S805において、クライアント装置102は送信対象装置に識別子を送信する。
図8は、クライアント装置103がクライアント装置102から識別子を取得する処理を説明するためのフローチャートである。図8に示す処理は、クライアント装置103がクライアント装置102から識別子を受信するタイミングで開始される。S901において、クライアント装置103はクライアント装置102から識別子を受信する。S902において、クライアント装置103は自装置が有するRAM203内の識別子リストにS901で受信した識別子を保存する。なお、サーバ装置104がクライアント装置102から識別子を取得する処理についても、図8を用いて説明した処理と同様である。
図9は、クライアント装置102が中継装置101からプッシュメッセージを受信する処理を説明するためのフローチャートである。図9に示す処理は、例えばクライアント装置102にユーザの操作などによって転送要求の指示がなされたタイミングで開始される。ただし、図10に示す処理の開始タイミングは上記タイミングに限定されない。S1001において、クライアント装置102は中継装置101に転送要求を送信する。S1002において、クライアント装置102は中継装置101からの転送終了までS1003からS1006の処理を繰り返す。本実施形態において転送終了となる場合は、例えばクライアント装置102にユーザの操作などによってプッシュメッセージの受信を終了する指示がなされた場合や、クライアント装置102が中継装置101から転送終了を示すメッセージを受信した場合である。なお、転送終了の条件はこれに限らない。
S1003において、クライアント装置102は中継装置101から識別子を含むプッシュ予約を受信する。S1004において、クライアント装置102は中継装置101からプッシュメッセージを受信するまで待機する。S1005において、クライアント装置102は中継装置101からプッシュメッセージを受信する。S1006において、クライアント装置102は中継装置101にプッシュレスポンスを送信する。なお、クライアント装置103が中継装置101からプッシュメッセージを受信する処理についても、図9を用いて説明した処理と同様である。
図10は、サーバ装置104が中継装置101に配信メッセージを送信する処理を説明するためのフローチャートである。図10に示す処理は、例えばサーバ装置104にユーザの操作などによってデータ送信の指示がなされたタイミングや、サーバ装置104がセンサーなどにより所定のイベントを検知したタイミングで開始される。ただし、図10に示す処理の開始タイミングは上記タイミングに限定されない。
S1101において、サーバ装置104は中継装置101に配信メッセージを送信する。S1102において、サーバ装置104は中継装置101から暫定応答を受信する。暫定応答は、配信メッセージが転送先のクライアント装置うちの一部に送達されたことを示す。これにより、サーバ装置104は各クライアント装置におけるメッセージの受信状況を把握することができる。S1103において、サーバ装置104は中継装置101から送達確認の通知を受信する。
図11は、中継装置101がサーバ装置104へのレシートの送受信のために行う前処理を説明するためのフローチャートである。図11に示す処理は、例えばサーバ装置104がクライアント装置102からプッシュURIを取得したタイミングで開始される。ただし、図11に示す処理の開始タイミングは上記タイミングに限定されない。
S1201において、中継装置101はサーバ装置104から、送達確認の通知を要求するための通知要求を受信する。S1202において、中継装置101はサーバ装置104に、通知要求に対するレスポンスを送信する。S1203において、中継装置101はサーバ装置104から、送達確認の通知や暫定応答などを要求するためのレシート要求を受信する。S1204において、中継装置101はサーバ装置104に、プッシュ型のデータ送信によりレシートを送信するためのプッシュ予約を送信する。
[変形例]
上述した本実施形態については、その主旨を逸脱しない範囲で種々の変形が可能である。本実施形態においては、クライアント装置102とクライアント装置103の2台の装置が同一の識別子を用いて中継装置101からプッシュメッセージを受信する場合を中心に説明した。ただしこれに限らず、3台以上のクライアント装置が同一の識別子を用いて中継装置101からのプッシュメッセージを受信してもよい。また、クライアント装置102及びクライアント装置103は、複数のサーバ装置からプッシュされるデータを受信してもよい。この場合、サーバ装置ごとに異なる識別子が用いられてもよい。なお、本実施形態では送信される転送要求やデータに識別子が含まれているものとしたが、識別子に基づく転送要求やデータが送信されればよい。例えば、転送要求と識別子とを関連付けるデータが、当該転送要求とは別に送信されてもよい。
また、本実施形態では、中継装置101とクライアント装置102やクライアント装置103との間の通信は、HTTP/2において規定されるコネクション及びストリームを使用して行われるものとした。一方、中継装置101とサーバ装置104との間の通信は、HTTP/1.1に従うものとした。ただし、通信システム100内で行われる通信の方式はこれらに限定されない。例えば、中継装置101とサーバ装置104との間の通信もHTTP/2に従う通信であってもよい。また、HTTP/1.1やHTTP/2に限らず、WebSocketやQUIC(Quick UDP Internet Connections)などの他の通信規格に従って通信が行われてもよい。この場合、各規格に応じた形式のメッセージや論理的な接続を使用して通信が行われる。また、本実施形態ではWebPushプロトコルに基づくプッシュ型のデータ送信が行われる例を説明したが、これに限らず、プッシュ通知を送受信するための他のプロトコルにも本実施形態を適用することができる。さらに、プッシュを用いないプロトコルにも適用可能である。
また、本実施形態においては、サーバ装置104が中継装置101へ送信するレシート要求にプッシュポリシーを含める場合を中心に説明した。これにより、中継装置101はサーバ装置104の要求に応じたデータの転送処理を行うことができる。なお、プッシュポリシーはサーバ装置104から中継装置101へ送信される配信メッセージに含まれていてもよいし、レシート要求や配信メッセージとは別に送信されてもよい。また、中継装置101やクライアント装置102などがプッシュポリシーを決定し、決定されたプッシュポリシーをサーバ装置104に通知してよい。さらに、複数装置間のネゴシエーションによってプッシュポリシーが決定されてもよい。また、クライアント装置102やクライアント装置103は、プッシュメッセージの受信ポリシーを決定し、この受信ポリシーに従って、中継装置101から送信されるプッシュメッセージを受信するか否かを判断してもよい。
<その他の実施形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC等)によっても実現可能である。また、そのプログラムをコンピュータにより読み取り可能な記録媒体に記録して提供してもよい。