Top Ten Questions about Programming Flash Communication Server

I've been keeping a check list of common problems and questions people run into when developing applications using the Flash Communication Server. I plan to use the list to make sure we do a decent job of answering questions and explaining things in the book. Recently I asked if people would post their top ten difficult questions about FCS on the Figleaf flashcomm mailing list. This is my compilation/summary of the results. A link to the original posts is at the bottom of the page. If you have other suggestions please post them on the Flashcomm list.

  1. Multi user programming is confusing. How do I write code that allows one person to do something and everyone else to see what that person did in the same Flash movie? How do I know if the code is in the sender or receiver's Flash movie? How can the same code work for different people?
  2. Remote Shared Objects are not something people are used to working with. A good diagram showing their structure and the list of information objects received by onSync() would help. Also a good interaction diagram showing local and server-side updates in sequence.
  3. Why use methods attached to a prototype vs methods attached to an instance. (Especially with the Client object.)
  4. What are the best practices for structuring and maintaining server-side ActionScript?
  5. How do you control streams from the server? For example having every client "tune in" to a stream but have the server dynamically change the content of that stream?
  6. How do you code callbacks and other asynchronous events while keeping your code simple and readable?
  7. What are the best practices for organizing and coding in Flash when developing a communication app?
  8. Where should I work with bytes or bits in Flashcom apps and how do I translate between them? Also, why are both used?
  9. How do you setup proxies (streams, shared objects, and methods) and why? How do you simplify the coding of these?
  10. How do you write a secure application? For example stop someone in mid-stream if you need to prevent them filling up your file system or stop them from using your app with their own swf or using your swf/app for their own purposes.
  11. How do I control client bandwidth usage as well as the total instance, application, and server usage? What application level and client level bandwidth settings should I use? How can I support clients with different network bandwidths such as modem and DSL users in the same app? How do I tune the bandwidth to just what each client needs - for example to play a prerecorded stream but no more? (Or disable write access entirely).
  12. When I have to make a remote function call I need to setup a responder object (or resultObject). For example nc.call("methodName", responderObject, parameter1, ...) how do I setup the responder? Should I use the same object as a responder for each call or create a separate responder object each time? Should I setup a relay object and relay the results to different objects? Is this different from how I work with Remoting?
  13. SharedObjects can't be subclassed so how do I make onSync() handlers do what I want? Do I customize each shared object with its own custom onSync() method? Should I wrap shared objects in another object or have shared objects broadcast events to other objects that act on them? Even though I can subclass a NetStream I'd rather not except maybe to get a more functional type of stream. So, when methods are called on streams and shared objects what is the best way to deliver or delegate those calls to another object? How do I set that up?
  14. How does resource naming work? I can have an app instance at rtmp://my.host.com/appOne/appInstanceThree and another at rtmp://my.host.com/appOne/appInstanceFive and each can have a shared object named "public/messages". Are they the same shared object? How do resources in one instance relate to resources in another? Does that have anything to do with the component naming scheme of ComponentClass.ComponentInstance and the resources they manage?
  15. How can I record everything that happens in an instance session and play it back later? For example I have an online auction and want to play back the entire event including the bids that were made and the voice of the auctioneer.
  16. What can I do about user's who don't know how to adjust the volume/gain of their microphone or the settings on their camera? Can I make it possible for a presenter or manager of an instance to take control of the user's sound and video settings?
  17. How do I get my shared object data into a List or DataGrid? What is the fastest and safest way and why can't I just do this: dataGrid.dataProvider = so.data; or this: myDataProvider[0] = so.data[slotName];? What are the safe ways to update a dataprovider with shared object data? Are there times when I shouldn't even do this: list.addItem(slotName, so.data[slotName]); ?
  18. Why can't I user so.data.property = value; in server-side ActionScript? Why do I have to so.setProperty(propertyName, propertyValue); instead?
  19. Sometimes I can use a Stream, NetStream, SharedObject, or a remote method call as soon as I create a NetConnection object. Other times I have to wait for the connection to complete. Why is that and when do I have to wait? Same question with proxied shared objects, streams, and remote methods.
  20. What's the difference between rtmp:/appName/appInstance and rtmp://host.name.com/appName/appInstance. When can I use the shorter form?
  21. How do I create server-side playlists?
  22. How do I setup VHosts and what difference does having multiple virtual hosts have, if any, on developing applications? Are there special things I should look for when developing in a hosted environment?
  23. Where do I put my files? Does my swf have to be in a subdirectory of the applications directory? Does the applications directory have to be under my Web root? Is the browser connecting to Flashcom on behalf of my swf or is my swf connecting directly?

Original Posts

You can see all the original posts by going to http://chattyfig.figleaf.com/search and entering the text: Top ten difficult Flashcom questions.


Document first posted April 20, 2004 by Brian Lesser