【问题标题】:Do AS3 socket event listeners require function scope where they are defined to end?AS3 套接字事件侦听器是否需要定义它们以结束的函数范围?
【发布时间】:2012-10-23 15:54:39
【问题描述】:

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

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

我的问题是:传递给addEventListener 的函数是否会在闪存运行时被调用是否会等待“等待”的函数结束?

【问题讨论】:

  • 或者在 socket.connect 之后,如果一切正常,我们会在同一个函数范围内得到 socked.connected == true
  • 应该没有时间了。最终,只能有一个(便宜的汉兰达插头)。它应该是连接的监听器......然后做一些事情。 while 非常适合内联.. 即,如果您处于 onData 事件中并且您正在侦听更多套接字信息.. 但连接不适用

标签: actionscript-3 sockets events actionscript


【解决方案1】:

只要您正在侦听的任何事件由您正在侦听的实例分派,传递给 addEventListener 的函数就会运行(如果有多个侦听器,这将基于事件优先级。

听起来你想尝试使套接字连接同步发生。您不能使用套接字执行此操作,尽管 AS 中有 some things 可以强制同步。

老实说,您应该尽早适应事件驱动架构,因为它使您可以享受各种 OOP 的可爱之处。

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

【讨论】:

  • 啊...所以更多信息:有新版本的 Alchemy/Flascc,它目前没有开箱即用的 unix 套接字支持。因此,为了支持旧的 C/C++ 代码库,我需要围绕 AS3 套接字创建同步包装器。我想知道两件事:可以开箱即用地以同步方式使用 AS3 套接字,否则如何为它们创建同步连接方法。
  • 考虑使用类似于此处描述的未来价值模式web.archive.org/web/20070403033325/http://johnwilger.com
【解决方案2】:

这是 AS3 中套接字的工作原理:

首先创建socket并添加监听器:

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

希望能帮助您设置套接字

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2023-03-17
    • 2017-07-03
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多