Adobe の rtmfp プロトコルと cirrus サーバーを使用した p2p ゲームがあります。スタンドアローンのフラッシュ プレーヤーで試してみると、すべて正常に動作しているように見えますが、ゲームを Web ページに埋め込むと、突然誰もゲームに接続できなくなります。エラーはありません。接続はしばらくするとタイムアウトします。
ホストで NetConnection を作成する方法は次のとおりです。
netConnection = new NetConnection();
netConnection.maxPeerConnections = 20;
netConnection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
netConnection.connect("rtmfp://p2p.rtmfp.net/3a34e[redacted]af45f80/");
public function onNetStatus(event:NetStatusEvent) : void
{
var peer:P2PNetPeer = null;
switch(event.info.code) {
case "NetConnection.Connect.Success":
streamOut = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);
streamOut.client = {onPeerConnect:onPeerConnect};
streamOut.publish(netConnection.nearID);
break;
}
クライアント側でもほぼ同じですが、NetConnection.Connect.Success を取得するときは inStream を作成します。
streamIn = new NetStream(netConnection, farId);
streamIn.client = {msg:onMessageReceived};
streamIn.addEventListener(NetStatusEvent.NET_STATUS, onInStreamStatus, false, 0, true);
streamIn.play(farId);
ゲームが Web ページから実行されている場合、この inStream が問題を引き起こします。スタンドアロン プレーヤーを使用してローカルで実行すると、ほとんどすぐに接続されます。
他の状態とエラーもチェックしていますが、ここでは重要ではありません (前述のように、エラーは発生していません。しばらくするとタイムアウトします)。
ここで何が起こっているのでしょうか?