AS3 / Flex 3 交错远程处理 +队列

发布于 2024-10-11 18:33:01 字数 2167 浏览 4 评论 0原文

我正在尝试创建一个类,将网络连接调用错开一定数量,以免对我的服务器造成太大压力,因此我的代码中没有运行十几个网络连接器。 我想要一个可以向其发送调用命令的类,该类将调用添加到队列中,然后大约每隔一秒它就会查看队列中是否有任何内容,如果有则调用它。这是我到目前为止所拥有的。

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);
}

绝对没有任何反应。知道为什么或者在正确的方向上为什么这不起作用吗?

I am trying to make a class that staggers the net connections calls by a certain amount to not put too much pressure on my server, and so I don't have a dozen net connectors running around in my code.
I want a class that I can send a call command to, the class adds the call to the queue, and then about every one second it see if anything is in the queue, and if so calls it. This is what I have so far.

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;
 }
}

Now when I call

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

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

absolutely nothing happens. Any idea why or a point in the right direction why this isn't working?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绝影如岚 2024-10-18 18:33:01

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

换句话说,

nc.connect(gateway);

就是失踪了。

请参阅NetConnection 文档

You created an instance of the NetConnection, but haven't actually initiated a connection with the server.

In other words,

nc.connect(gateway);

is missing.

See NetConnection documentation for more information on that class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文