Есть ли способ передачи данных из C ++ во Flex / Air быстрее, чем в сокеты? - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть приложение на C ++, которое отправляет изображения в интерфейс Flex / Air через TCP-сокеты.Вся эта передача данных происходит на одном хосте, поэтому сокет подключается к локальному хосту.

Проблема в том, что Flex / Air очень долго читает весь образ из сокета.Сервер отправляет изображение довольно быстро, но Flex / Air считывает это изображение крошечными частями.Все изображение имеет около 300 МБ, а Flex / AIR читает только около 1 КБ за каждую итерацию.Таким образом, flex продолжает вызывать обратный вызов данных сокета, что приводит к замедлению работы приложения.

Есть ли какие-либо синхронные сокеты, которые можно использовать с flex, или какой-то тип сокета, который может считывать все данные одновременно?Если сокеты не лучший выбор, есть ли другие более быстрые варианты?

Мой класс сокетов выглядит так:

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 ]

1 голос
/ 02 марта 2012

Я бы использовал Собственные расширения для AIR .Это обеспечивает интерфейс, позволяющий отправлять данные напрямую между C ++ и AS3.Это определенно будет быстрее, но вам нужно ориентироваться на AIR 3.0, и вам нужно создать расширение для каждой платформы, на которой работает ваш код.

0 голосов
/ 01 февраля 2012

Я думаю, вам нужно изменить свое решение, если это возможно. Вам нужен http-сервер для размещения ваших изображений и отправки имени файла (или URL-адреса) во внешний интерфейс Flex, после чего вы можете загрузить их с помощью URLLoader и прослушивать только «завершенное» событие.

Я уверен, что это будет быстрее; о) Это решение применимо?

...