开发者

Flash XML socket choking

I'm trying to work out some kinks in a multitouch application I've built. It uses flosc to communicate with a xml socket server that sends the multitouch events.

This all works fine and dandy for most 开发者_如何学Goof the time.

But if I'm mean and flood it with multitouch events Flash can't keep up with parsing the input, and the socket just keeps getting data that piles up until it either catches up or the whole thing crashes.

I have no problem discarding input once there's too much*, but I'm having trouble devising a clever way to do it.

* The app does 6-10 simultaneous inputs with no problem, things start to get hairy once I have to deal with 20+ which basically means someone is lying on the table ;)


Where is it choking? First I would start with doing some analysis.

Profile the "Server":

  • how much time it is taking to do XML encoding?
  • how much time it is taking to completely write to the socket?

Profile the Client:

  • how much time is it taking to read the data from the socket?
  • how much time is it taking to decode the XML?

Personally for something like this I would avoid XML if you could, and/or try to lazy-decode the xml (do it when you know you need it...so you can throw away XML chunks without wasting cpu cycles if your program is getting overloaded).

I would try to go with a raw Socket class http://www.adobe.com/livedocs/flash/9.0/main/00000318.html#wp128960 and a custom packet format, an array where each index contains relevant data. in psudocode:

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

so you might have a 'mouse move event' defined like:

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

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

Then use AMF http://en.wikipedia.org/wiki/Action_Message_Format to serialize the data over the wire.

Hope this helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜