maeshimaの日記

メモ書きです

SharedObjectについてのメモ

簡単に言うとflash版cookie。ローカルにもサーバ上にも保存できる。
サーバ上に保存するにはFlash Media Serverが必要(たぶんRed5とかでもおk)

SharedObject - ActionScript 3.0 コンポーネントリファレンスガイド

ローカルのSharedObjectを作成/取得する

SharedObject.getLocal()

リモートの(ry)

SharedObject.getRemote()

あるクライアントが共有オブジェクトを変更すると、現在そのオブジェクトに接続しているクライアントおよび後でそのオブジェクトに接続するクライアントのすべてが、変更されたデータを利用できます。

他の人とオブジェクトを共有できるってことかな?

オブジェクトがローカルに永続化され、サーバーに接続されていないときにクライアントがデータを変更すると、次回クライアントがリモート共有オブジェクトに接続するときに、データがそのオブジェクトにコピーされます。

これは便利。

リアルタイムでデータを共有する

共有オブジェクトは、複数のクライアント間でリアルタイムにデータを共有できます。たとえば、チャットルームに接続しているユーザーのリストを格納するリモート共有オブジェクトを開くことができます。これはオブジェクトに接続しているすべてのクライアントに表示することができます。ユーザーがチャットルームに入退室するときに、オブジェクトが更新され、オブジェクトに接続しているすべてのクライアントに、更新後のチャットルームユーザーの一覧が表示されます。

flash & flash media serverだけでチャットサービス作れたりするんだろうか?→たぶん容量制限あるだろうから難しいだろうね

オブジェクトが保存されるタイミング

アプリケーションを閉じると、共有オブジェクトが保存されます。つまり、ディスクに書き込まれます。また、flush() メソッドを呼び出して、データを明示的にディスクに書き込むこともできます。

はてなの日記書き込みする前にブラウザを閉じちゃった時に復旧する仕組みはこれを使ってるっぽいな

注意事項

ユーザの設定によっては

  • ローカル共有オブジェクトに書き込めない
  • 容量オーバーになって消される
  • サードパーティドメインのによる共有オブジェクトの読み書き禁止(リモート限定?)

になることがある。

SWFファイルがダイアログボックスのサイズよりも小さい(215 * 138)とSharedObject.flush()が失敗する

データの永続化

この「永続化」の意味はブラウザ閉じても消えないってことかな?

クライアント、サーバー、またはその両方のリモート共有オブジェクトを永続化できます。デフォルトでは、サイズが最大 100K の永続的なリモート共有オブジェクトがローカルに保存されます。大きなオブジェクトを保存しようとすると、[ローカル記憶領域] ダイアログボックスが表示されます。

永続化データは最大100Kまで。