Flash XML socket choking

被刻印的时光 ゝ 提交于 2019-12-11 12:50:01

问题


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 of 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 ;)


回答1:


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.



来源:https://stackoverflow.com/questions/2229237/flash-xml-socket-choking

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!