メッセージ履歴の処理
ここでは、Photon Cloudがチャットメッセージの履歴を管理する方法と、Chatクライアントを介してそれを処理する方法について説明します。
##公開チャンネル
Photon Cloudは、チャンネルが存在する限り、チャンネルごとに最後に公開されたメッセージを保持します。
空のチャンネルは、数秒のタイムアウト後にサーバー上で破棄されます。すべてのメッセージがクリーンアップされます。
履歴を保持するには、Photon Chat WebHooksを使用します。
Photon Cloudは、公開チャットチャンネルごとに最大100件のメッセージを履歴に保持します。
チャンネルを購読する場合、チャットクライアントは、履歴から受信するメッセージの数を設定できます(存在する場合)。
これは、historyLen
(またはmessagesFromHistory
)パラメーターを使用して実行できます。
- -1:すべての未受信メッセージ、最大100。
- 0:なし。 (デフォルト)
- 1> = x> = 100:xまでのすべての欠損したメッセージ。
これは、特に少数を表示する場合や、一度に受信し処理するメッセージが多すぎるとパフォーマンスが低下する可能性がある場合に、大量の受信を回避するのに役立ちます。 - 他の値は許可されません。
チャンネル内で発行された各メッセージには一意のIDがあります。
メッセージIDは整数で、1から始まり、新しいメッセージが発行されるたびに増分されます。
チャットチャンネルの履歴は限られていますが、サーバーはチャンネルごとにチャンネル内で公開された最後のメッセージIDを追跡します。
例:ユーザーが573番のメッセージを時系列に公開すると、チャンネルの作成以降のすべてのユーザーからのすべてのメッセージがカウントされます。
- 発行されたメッセージのIDは573になります
- チャンネルの履歴には100個のメッセージがあります:MsgID=474からMsgID=573
- チャンネルの最後のメッセージIDは573に設定されます
クライアントが予期しない切断から回復し、同じチャンネルに購読する場合、またはクライアントがアプリケーションを一時停止した後に古いチャンネルに戻る場合、サーバーから'delta'または'diff'のみを受信するべきです。
以前に受信したメッセージを取得する必要はありません。
クライアントが不在のときにチャンネルで公開されたメッセージのみを受信する必要があります。受信できなかったメッセージのみ。
Photon Chatクライアントは、 lastMsgId
(または同時に複数のチャンネルに購読する場合はlastMsgIDs
)パラメーターを使用して、サーバーにそのチャンネルのサーバーから受信した最後のメッセージのIDを伝えることができます。
このようにして、サーバーは、そのメッセージの後に発行されたメッセージ(ある場合)のみを送り返すことができます。
これらのメッセージには、送信されたlastMsgId
よりも高いIDがあります。
もちろん、ユーザーが長時間切断されたままで、この不在中に発行されたメッセージが履歴メッセージの容量を超えた場合、一部のメッセージはクライアントに届きません。
例:ユーザーは、同じチャンネルでID 218の最後のメッセージを受信した後、チャンネルから登録解除します。
チャンネルはメッセージID 603に到達し、持つ履歴に100個のメッセージ、504から603のIDがあります。
この時点で、同じユーザーが同じチャンネルに購読していた場合、219〜503のIDのメッセージを見逃していたことになります。
lastMsgId
を適切に使用するための要件は、クライアントがチャンネルごとに受信した最後のメッセージのIDを追跡することです。
一部のクライアントSDKは、アプリケーションセッション全体のチャンネルごとに最後のメッセージIDを保存および公開する場合がありますが、デバイスでローカルにキャッシュするか、必要に応じて独自のバックエンドで保持する必要があります。
また、チャンネルごとにhistoryLen
およびlastMsgId
パラメーターを組み合わせて、最後に欠損したメッセージのみを受信することもできます(存在する場合)、それらのすべて(historyLen
= -1)または特定の数(0 < 100)。
ただし、 lastMsgId
で historyLen
== 0を使用することは意味がありません。
例:ユーザーは、同じチャネルでID 777の最後のメッセージを受信した後、そのチャネルから登録解除します。
チャンネルはメッセージID 801に到達し、履歴に、702から801のIDを持つ100個のメッセージがあります。
同じユーザーが同じチャンネルに購読して、 lastMsgId
= 777と historyLen
= -1を送信します。
この場合、サーバーはID778から801の最後の23メッセージを送り返します。
プライベートチャット
Photon Chatでは、オフラインユーザーでもプライベートメッセージを送信できます。
プライベートメッセージがオフラインユーザーに送信される場合、それらのメッセージは、ユーザーが接続するか送信者が切断するまでPhoton Cloudに保存されます。
Photon Cloudは、2人のユーザーのうちの1人が接続している限り、2人のユーザー間のプライベートな会話ごとに最大100個のメッセージを履歴に保持します。
両方のユーザーが切断されると、プライベート会話は削除されます。