我有一个使用 Adobe 的 rtmfp 协议和 cirrus 服务器的 p2p 游戏。当我在独立的 Flash 播放器中尝试时,一切似乎都运行良好,但是当我将游戏嵌入网页时,突然没有人无法连接到我的游戏。没有错误,连接只是在一段时间后超时。
这是我在主机上创建 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);
这个 inStream 是导致问题的一个,如果游戏是从网页运行的,它永远不会连接到他的 farId 指定的主机(我配对玩家并使用我自己的服务器交换近/远 ID)。当我使用独立播放器在本地运行它时,它几乎立即连接。
我也在检查其他状态和错误,但它们在这里并不重要(如上所述,我没有收到任何错误,只是在一段时间后超时)
知道这里可能会发生什么吗?