2010-02-09 2 views
1

Я пытаюсь выработать некоторые изломы в приложении мультитач, которое я создал. Он использует flosc для связи с сервером сокетов xml, который отправляет события мультитач.Flash XML socket choking

Все это прекрасно работает и денди в течение большей части времени.

Но если я имею в виду и наводняю его событиями с мультитачом, Flash не справляется с разбором ввода, и сокет просто продолжает получать данные, которые накапливаются до тех пор, пока он не настигнет, или все это не сработает.

У меня нет проблем с отбрасыванием ввода, если слишком много *, но у меня возникли проблемы с разработкой умного способа сделать это.

* Приложение делает 6-10 одновременных входов без проблем, вещи начинают получать волосатый когда мне приходится иметь дело с 20+, которые в основном означает, что кто-то лежит на столе;)

+0

мультитач ... таблица ... вы работаете на новом продукте Apple, случайно? :) –

ответ

1

Где это задыхаясь? Сначала я начну с анализа.

профиль "сервер":

  • сколько времени она берет, чтобы сделать кодировку XML?
  • сколько времени требуется для полной записи в розетку?

Профиль клиента:

  • сколько времени он принимает для чтения данных из сокета?
  • сколько времени требуется для декодирования XML?

Лично для чего-то вроде этого я бы избежать XML, если вы могли бы, и/или пытаться отложенной декодировать XML (сделать это, когда вы знаете, что это нужно ... так что вы можете выбросить XML куски, не теряя cpu, если ваша программа перегружена).

Я бы попытался пойти с сырым классом Socket http://www.adobe.com/livedocs/flash/9.0/main/00000318.html#wp128960 и настраиваемый формат пакета, массив, в котором каждый индекс содержит соответствующие данные. в psudocode:

messageArray = [message type, arg0, arg1, arg2...]; 

так что вы можете иметь «движение мыши событие», определяемый как:

MessageConstants.MOUSE_MOVE = 0; // or whatever id you want 

messageArray = [MessageConstants.MOUSE_MOVE, mouseDeltaX, mouseDeltaY]; 

Затем используйте AMF http://en.wikipedia.org/wiki/Action_Message_Format для упорядочивания данных по проводам.

Надеюсь, это поможет.

+0

Я вообще не могу прикасаться к серверу, он работает с использованием стандартного протокола (flosc) и может подключаться к нескольким серверам. на удивление приложение тратит всего около 5% времени на анализ данных, подавляющее большинство из них проводит рендеринг. прямо сейчас я начинаю подозревать, что все начинается с исключения, отбрасывающего все оттуда. – grapefrukt

+0

Хорошо, да, хорошо, если вы не справляетесь со своими исключениями, что-то может привести к перебоям. Используете ли вы Debug Player/Plugin ActiveX? Кроме того, я бы, вероятно, просто оставил очередь, возможно, FIFO из n событий, и вытолкнул их из него из фида flosc и вытащил их, когда вы их обрабатываете.Если очередь имеет максимальный размер, либо выталкивайте ее с любого конца (в зависимости от того, что работает лучше всего). Другим вариантом является предоставление всех весов типов событий в зависимости от важности события и, возможно, времени его захвата, а затем использования очереди приоритетов http://en.wikipedia.org/wiki/Priority_queue из n элементов. – Jotham

+0

Оказывается, это было исключение, которое было «глубже» в моем коде. Как только исключение было выброшено, вспышка никогда не была догнана и просто продолжала получать еще больше исключений. Случилось так, что когда приложение получает много ввода, оно может получить события касания в неправильном порядке, т.е. после прикосновения произойдет прикосновение. Моя логика не справилась с этим, поэтому он попытался обновить что-то, чего там не было, тем самым используя уже удаленные экземпляры. Но это было легко исправить, как только я нашел его. – grapefrukt

 Смежные вопросы

  • Нет связанных вопросов^_^