2010-02-09 67 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