2010-02-09 46 views
1

我正在尝试解决我构建的多点触控应用程序中的一些问题。它使用flosc与发送多点触控事件的xml套接字服务器进行通信。闪存XML插槽窒息

这一切在大多数时间都可以正常工作。

但是,如果我的意思是,并与多点触控事件洪水闪光无法跟上解析输入,并套接字只是不断收集数据,直到它或者赶上或整个事情崩溃。

一旦有太多的*我就没有问题了,但是我在设计一个聪明的方法时遇到了麻烦。

*的应用程序做6-10没有问题同时输入,事情开始变得毛茸茸的,一旦我有对付20+这基本上意味着有人趴在桌子上;)

+0

多点触控...桌子......你是否正在研究新的苹果产品? :) – 2010-02-09 13:35:30

回答

1

它在哪里窒息?首先,我将开始做一些分析。

简介 “服务器”:

  • 多少时间,它正在做的XML编码?
  • 需要多少时间才能完全写入套接字?

简介客户:

  • 是服用多少时间来阅读从插座中的数据?
  • 解码XML需要多长时间?

亲自为这样的事情,如果你能我会避免XML,和/或试图偷懒,解码XML(做到这一点,当你知道你需要它...所以你可以扔掉不浪费XML块CPU周期如果你的程序越来越重)。

我会尝试去原始套接字类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 2010-02-11 10:58:03

+0

好的,是的,如果你没有管理你的例外事件可能会破产。你使用的是Debug Player/Plugin ActiveX吗?另外,我可能只是简单地保留一个队列,也许是n个事件的FIFO,然后将它们从flosc feed中推入并在处理它们时将其拉出。如果队列的尺寸最大,则从任一端弹出一个(取决于最佳效果)。另一种选择是根据事件的重要性给予所有事件类型的权重,也可以使用n项目的优先级队列http://en.wikipedia.org/wiki/Priority_queue来获取事件类型的权重。 – Jotham 2010-02-12 04:17:09

+0

原来它实际上是一个异常,在我的代码中被“更深入”抛出。一旦抛出异常,flash永远不会被抓起来,只会持续得到更多的异常。 发生了什么事情是,当应用程序获得大量输入时,它可能以错误的顺序获取触摸事件,即。触摸移动将在触摸后到达。我的逻辑没有处理这个,所以它尝试更新那些不存在的东西,从而使用已经删除的实例。但是一旦我找到它,这是一个简单的解决方案。 – grapefrukt 2010-02-14 21:14:04