有没有什么方法可以比Cocket更快地将数据从C ++传输到Flex / Air?

时间:2012-02-01 12:09:23

标签: c++ flex sockets air

我有一个C ++应用程序,它通过TCP套接字将图像发送到Flex / Air前端。所有这些数据传输都发生在同一主机中,因此套接字连接到本地主机服务器。

问题是Flex / Air需要很长时间才能从套接字读取整个图像。服务器发送图像的速度非常快,但Flex / Air会以微小的部分读取此图像。整个图像大约有300MB,Flex / AIR每次迭代只读取大约1KB。因此flex继续调用套接字数据回调,这导致应用程序减速。

是否有与flex一起使用的同步套接字,或某种可以一次读取所有数据的套接字?如果套接字不是最佳选择,还有其他更快的选择吗?

我的socket类看起来像这样:

public class ClientSocket extends Socket
{

    public function ClientSocket(host:String, port:int)
    {
        super();
        addListeners();
        ...
        this.endian = Endian.LITTLE_ENDIAN;
    }

    private function addListeners():void
    {
        ...
        addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
        ...
    }

    private function onSocketData(event:ProgressEvent):void
    {
        try
        {
            ...
            var serverMessage:ByteArray = new ByteArray;
            readBytes(serverMessage);
            ...
        }
        catch(error:Error)
        {
            //Error handling
        }           
    }
}

2 个答案:

答案 0 :(得分:1)

我会使用Native Extensions for AIR。这提供了一个接口,以便您可以在C ++和AS3之间直接发送数据。它肯定会更快,但您需要针对AIR 3.0,并且需要为运行代码的每个平台创建扩展。

答案 1 :(得分:0)

我认为如果可能,您需要更改解决方案。您需要一个http服务器来托管您的图像,并将图像的文件名(或URL)发送到Flex前端,然后您可以通过URLLoader加载它们,并只收听“完整”事件。

我确信这会更快; o)这个解决方案是否适用?