2011-01-13 13 views
0

我想让一个错误的网络连接调用一定数量的类不会对我的服务器施加太大的压力,所以我没有十几个网络连接器运行在我的代码中。 我想要一个可以发送调用命令的类,类将该调用添加到队列中,然后每隔一秒查看是否有任何内容在队列中,如果是,则调用它。这是我迄今为止所拥有的。AS3/Flex 3交错远程处理+队列

package net 
{ 
import flash.events.TimerEvent; 
import flash.net.NetConnection; 
import flash.net.Responder; 
import flash.utils.Timer; 


public class Server 
{ 
    private static var gateway:String = "http://localhost/gateway.php"; 
    private static var queue:Vector.<ServerNode> 
    private static var nc:NetConnection; 
    private static var instance:Server = null; 
    private static var res:Responder; 
    private var timer:Timer; 

    public function Server(e:ServerEnforcer) { 
    nc = new NetConnection(); 
    queue = new Vector.<ServerNode>(); 
    timer = new Timer(1000); 
    timer.addEventListener(TimerEvent.TIMER, execCall); 
    timer.start(); 
    } 

    public static function getInstance():Server { 
    if (instance == null) { 
    instance = new Server(new ServerEnforcer); 
    } 
    return instance; 
    } 

    private function execCall(e:Event):void { 
    if (queue.length > 0) { 
    var node:ServerNode = queue.pop(); 
    nc.call(node.method, node.res, node.args); 
    } 
    } 

    public function call(method:String, success:Function, failure:Function, ...args):void { 
    queue.unshift(new ServerNode(method, success, failure, args)); 
    } 

    private function serverFailure(event:Object):void { 
    trace("Server Failure : " + event.description); 
    } 
} 
} 
import flash.net.Responder; 

class ServerEnforcer { } 

class ServerNode { 
public var method:String; 
public var success:Function; 
public var failure:Function; 
public var args:Array; 
public var res:Responder 

public function ServerNode(_method:String, _success:Function, _failure:Function, _args:Array) { 
    method = _method; 
    success = _success; 
    failure = _failure; 
    res = new Responder(success, failure); 
    args = _args; 
} 
} 

现在,当我打电话

Server.getInstance().call("Fetch.getData", parseAllData, onError) 

public function parseAllData(event:Object):void { 
    trace("Victory!"); 
} 
public function onError(event:Object):void { 
    trace("Error :" + event); 
} 

绝对没有任何反应。任何想法为什么或在正确的方向点为什么这不起作用?

+0

究竟发生了什么?例如,在调试模式下,程序是否连接到服务器,它只是返回的数据是空的,您的应用程序是否可以运行?至少提供那么多的信息。 – Ryan 2011-01-13 09:28:54

回答

0

您创建了NetConnection的实例,但实际上并未启动与服务器的连接。

换句话说,

nc.connect(gateway); 

缺失。

请参阅NetConnection documentation了解该类的更多信息。

+0

谢谢。这是问题所在。 – 2011-01-13 19:46:53