Flash Player 9,0,115,0 だとRed5 0.6.3 でSharedObjectが扱えない

2008.02.05 / java

すごく限定的で細かい問題だけど丸一日を潰されたので、その備忘録に。内容は件名の通りです。

2008/02/05 時点での最新のFlash Player(9,0,115,0)だと、Red5(0.6.3)で、SharedObjectがうまく扱えません。具体的に言うとActionScript3で

  this.so = SharedObject.getRemote(this.session, this.nc.uri, true);
  this.so.addEventListener(SyncEvent.SYNC, this.syncListener);
  this.so.connect(this.nc);
  

こんな感じのコードを書いたときに、

  this.so.setProperty('message', msg);
  

と、setPropertyでso.dataを変更したときにSyncイベントが上がってこない、という不具合。イベントが上がらないから、イベントリスナでキャッチできずに処理が進まない、という悪循環。もう少し細かく言うと、so.setPropertyする瞬間にorg.red5.server.net.protocol.ProtocolExceptionが発生して、ここで処理が止まっちゃってるのが問題です。

これ、1つ前のバージョンのFlash Player(9,0,47,0)だと発生しないから厄介です。9,0,115,0は9系の中でかなり大きな機能追加+修正がかかっているので要注意。9,0,47,0からの差分はリリースノートを参照。

さて、この問題ですがどうやらRed5開発陣には既に通っている問題のようです。

Trunk (2480) version of Red5 and previous versions (I first noticed the issue about 3 months ago). Flash Player 9,0,115,0 or any of the Flex Builder 3 Beta Debug Players. IE, Firefox, Opera (all same issue).

via New Flash Player (9,0,115,0) Using AMF3 Causes ProtocolExceptions which disconnect clients.

ちょうど今日(2/4)にコミットされているSubversionのtrunkのソースだとBugFixされているようです。

> I’m pretty sure that this ha been fixed in the trunk. Steven gong
> worked on this for one of our clients that was experiencing the
> problem. Steven, can you confirm that the SharedObect AMF3 bug is fixed?
Yes. These two issues should have been fixed now.

via Tickets for 0.7

最新のソースはhttp://svn1.cvsdude.com/osflash/red5/java/server/にあります。trunkフォルダを手元に落としてきて、

ant all

でフルビルドできます。JDK6, antあたりが手元にあればOKです。「FedoraにRed5をインストール」もあわせてご参照ください。