我有一个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
}
}
}
答案 0 :(得分:1)
我会使用Native Extensions for AIR。这提供了一个接口,以便您可以在C ++和AS3之间直接发送数据。它肯定会更快,但您需要针对AIR 3.0,并且需要为运行代码的每个平台创建扩展。
答案 1 :(得分:0)
我认为如果可能,您需要更改解决方案。您需要一个http服务器来托管您的图像,并将图像的文件名(或URL)发送到Flex前端,然后您可以通过URLLoader加载它们,并只收听“完整”事件。
我确信这会更快; o)这个解决方案是否适用?