AS3套接字事件侦听器是否需要定义它们的函数作用域?

时间:2012-11-02 23:45:56

标签: actionscript-3 sockets events actionscript

假设我们在其中声明了一个函数和一个套接字。我们打电话给connect。现在我们打电话给addEventListener进行连接。

理论上,我们可以设置提供给eventDispatcher的函数来更改类变量,而最初调用addEventListener的函数可以锁定在该变量上(类似while(!class_instancce.is_connected))。

我的问题是:传递给addEventListener的函数被调用flash运行时间会等待“等待”的函数结束吗?

2 个答案:

答案 0 :(得分:0)

传入addEventListener的函数将在您正在侦听的实例调度后立即运行(如果有多个侦听器,则这将基于事件优先级。

听起来我想要尝试使套接字连接同步发生。你不能用套接字来做这件事,尽管AS中有some things你可以强制同步。

老实说,你应该尽早熟悉事件驱动的架构,因为它可以为你提供各种OOP可爱。

如果您受到约束并确定,您可以使用匿名函数。你可以自己研究一下。我认为这是一个坏习惯,除非你真的知道你正在做什么以及如何避免内存泄漏等。

答案 1 :(得分:0)

以下是套接字在AS3中的工作方式:

首先创建套接字并添加Listeners:

_socket = new Socket();
// or if secure
_socket = new TLSSocket();
_socket.addEventListener(Event.CONNECT, onConnect);
_socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
// also add listeners for errors, close etc
_socket.connect(myURL, myPORT);

private function onConnect(event:Event):void{
    //connection is live now so do whatever like send something
    var request:String = "create a request here";
    _socket.writeUTFBytes(request);
    _socket.flush();
}

private function onData(event:ProgressEvent):void{
    //this gets called EVERY time new data comes over the socket
    // the socket will stay connected until you close it (or an error makes it drop)
    // here is how you read what came over the socket
    while(_socket.bytesAvailable){
        theData = _socket.readUTFBytes(_socket.bytesAvailable);
    }
    // now do something with the data
}

希望能帮助您设置套接字