What is a good Flash Socket Server for a Newbie? - actionscript-3

I have been debating which Flash Socket Server to use for a virtual world (multiplayer game).
I want something that has a very abstract api and requires little to no server side programming.
From what I see only Smartfox and ES sort of cater to game development.
I'm open to any suggestions and if anyone knows which API is easier to learn (Smartfox or ES) don't be afraid to chime in :)

I'm currently developing a flex+smartfox mmo project.
my experience with smartfox is not so "easy", if you need some custom behaviours or some bandwidth saving protocols you just have to choose another way.
the great lack of smartfox is amf support, the data is not sent and received via a binary socket, everything is transfered as a string, so you can only imagine how bandwidth sucker the transfer is...
however the plus of smartfox is you can cluster it quite easily via terracotta and can you can implement your extensions in java, python and as3. further it supplies some ready to use functionalities such as chat rooms, friendlists, etc..
I have some experience with red5 too, it's a completely different approach, the main plus of working with it would be streaming assets such as mp3 or video to the clients, so if you need ambient sounds or something similar red5 or fms could be your choice.
however I don't have experience with electroserver nor union, so i can't say much on them.

Well, the easiest to program for would probably be Flash Media Server since you program the server in a variant of ActionScript.
I have experience with a bunch of them - FMS, ElectroServer, Union(used to be Unity), Red5, etc and I have to say that I really liked Union. Union's website has a bunch of good beginner tutorials as well.

Related

Faye Client for ActionScript3

I'm looking for a pub/sub messaging system to connect various applications I'm building, some of them will be iOS, other ones AIR/AS3 and maybe some openFrameworks.
I found out Faye and it looks like really interesting. I've found libraries to integrate it in all my apps/languages, so I'm trying it out.
Now, the problems are with the AS3 implementation. I've found this great library and it's kind of working, BUT I've some issues I can't understand. My main problem is that I can build clients, connect them to a node.js server and exchange information between them, but after a while they stop receiving information.
So I was wondering:
do anyone of you have experience with Faye and this library, and knows if this behaviour it's normal and if there's a way to prevent it? I've done some tests using some html browser clients and everything was ok, so it's definitely a flash library problem
do you know any other library to implement Faye in AS3/AIR? I was browsing a lot but I couldn't find anyone
Do you know any alternative pub/sub messaging system I could implement (easily) in as3?
Thank you
We've open sourced our implementation of AS3 Faye client recently. You can find it here.
It's been in prod for more than a year and was tested by millions of users, without issues so far. It's used in Flash Player Web and AIR Mobile applications.
Interfaces mimic JS client interfaces, so its setup is as easy as JS client setup. Plus one additional feature: multiple urls for reconnection fallbacks.
Give it a try!

Sending data between 2 flash apps

I would like to create android/ios app that has a feature like candy crash life sending.
Is it possible in as3 to create such thing?
Do I need to use a server side or it can be done with flash and as3?
Short and simple: YES, most definitely you'll need server.
Also, bear in mind that if you plan to sell goods in the game or similar - you will need to verify the data send from the flash on the server. It's pretty easy to decompile the swf, make changes to say have unlimited moves, compile again and play.
If you're planing that, I'll suggest to make more research on how to make a "secure" game, since flash in general is considered as unsafe...

Converting an application from Unity3d to Flash

I am attempting to convert my Unity3d game to flash but am experiencing trouble with comments. Because of the socket trouble, I am trying to use Json and Post, but I don't know where to start. I saw this
Java server- client socket communication
but it incorporates sockets.
This is for the user client, but I also need to redo the server side. I believe I need a web server to get the Json strings and return the appropriate response.
Am I doing this right, or is there something I am overlooking?
This may lessen the amount of work quite a bit if you are interested in using an API. Smartfox is an awesome Client API / Multiplayer server tool that can increase output time as well as allow you to implement efficiency code to improve server stability.
It works for both Unity3D and flash.
http://www.smartfoxserver.com/
Addressing your main question I believe you would need a server to effectively use Json and be able to communicate to the clients however this is where smartfoxserver can come in handy. I have not had much experience in the flash multiplayer programming however smartfox is a great tool and I used it to make multiplayer programs in unity3d.
Hope this helps!
Mitch

Client-side image processing

We're building a web-based application that requires heavy image processing. We'd like this processing load to be on the client as much as possible and we'd like to support as much platforms (even mobiles) as much as possible.
Yeah, I know, wishful thinking
Here's the info:
Image processing is rasterization from some data. Think like creating a PNG image from a PDF file.
We don't have a lot of server power. So client-side processing is a bit of a must.
So, we're considering:
Flash - most widespread, but from what i read has lackluster development tools. (and no iPhone/iPad support for now).
Silverlight - allows us to use .NET CLR, so a big ++ (a lot of code is in .NET). But is not supported for most mobiles ( rumored android support in the future)
HTML5 + Javascript - probably the most "portable" option. The problem is having to rewrite all that image processing code in Javascript.
Any thoughts or architectures that might help?
Clarification: I don't need further ideas on what libraries are available for Silverlight and Javascript. My dilemma is
choosing Silverlight means no support for most mobiles
choosing Flash means we have to redevelop most of our code AND no iPhone/iPad support
HTML5 + Javascript we have to redevelop most of our code and not fully supported yet in all browsers
choosing two (Silverlight + Flash) will be too costly
Any out-of-the-box or bright ideas / alternatives I might be missing?
This is the sort of issue that software architects run up against all the time. As per usual, there is no ideal solution. You need to select which compromise is most acceptable to your business.
To summarise your problem, most of your image processing software is written in .NET. You'd like to run it client-side on mobile devices, but there is limited .NET penetration on mobiles. The alternatives with higher penetration (eg. Flash) would require you to re-write your code, which you can't afford to do. In addition, these alternatives are not supported on the iPhone/iPad.
What you ideally want is a way to run all your .NET code on most existing platforms, including iPhone/iPad. I can say with some confidence that no such solution currently exists - there is no "silver bullet" answer that you have overlooked.
So what will you need to compromise on? It seems to me that even if you redevelop in flash, you are still going to miss out on a major market (iPhone). And redeveloping software is extremely costly anyway.
Here is the best solution to your problem - you need to compromise on your "client side execution" constraint. If you execute server side, you get to keep your existing code, and also get to deploy to just about every mobile client, including the iPhone.
You said your server power is limited, but server processing power is cheap when compared to software development costs. Indeed, it is not all that expensive to outsource your server component and just pay for what you use. It's most likely that your application will only have low penetration to start off with. As the business grows, you will be able to afford to upgrade your server capacity.
I believe this is the best solution to your problem.
Host you image processing on Amazon E2C, Azure, or Google. IIRC E2C has many common image processing problems packaged and all ready to go.
Azure probably more familiar ground in term of sharing code as a web service
You just pay for CPU cycles and transfers/storage etc
I'm sure there will be Silverlight and JS people posting examples. Here are some image editors written in actionscript:
Phoenix
PhotoshopExpress
There is an ImageProcessing library to start with.
Plus PixelBender is available in Flash Player 10, it's fast, it runs in a separate thread
and people do some pretty mad things with it.
HTH
Some help for the Silverlight part:
There is an Silverlight image editor called Thumba.
And Nokola recently made one called EasyPainter and he will also provide the source code in the furure.
For the image conversion I would recommend the open source library ImageTools that also includes some basic effects.
Silverlight has a class for pixel manipulation of bitmaps called WriteableBitmap. The open source library WriteableBitmapEx is a collection of extension methods for Silverlight's WriteableBitmap. The WriteableBitmap API is very minimalistic and there's only the raw Pixels array for such operations. The WriteableBitmapEx library tries to compensate that with extensions methods that are easy to use like built in methods.
Pixel Shaders can also be used to make some fast and advanced effects. Although they are limited by Shader Model 2 shaders can be used for fast bluring, tinting and such things.
DISCLAIMER: I consider myself as an advocate of the Flash platform. I admire Silverlights huge potential as a technology to deploy almost any .NET content through the browser, but it has low penetration, is horribly marketed and -although perceived as such by many (mostly people who don't know either Flash or Silverlight)- is no competitor of Flash, as much as Flash is no competitor of Sliverlight. The idealist in me loves the idea of doing everything in HTML+JS using a standard, instead of relying on 3rd party proprietary software. But the truth is, JS is slow and the API is limited, and implementations of JS, HTML and CSS are terribly inconsistent accross browsers.
If you really wanna stick to .NET and are so interested in targeting the iPhone and its siblings, then you might wanna check out MonoTouch.
Still, even though this may surprise you, I am going to tell you to use Flash. :)
Why? The image processing bit is the smallest part of your application. Whatever it is you are writing, I am very sure of that. I don't know about Silverlight, but in Flash the filters used by "Thumba" and "EasyPainter" can be created within a day, most of them simply using ConvolutionFilter, ColorMatrixFilter, DisplacementMapFilter and BitmapData::paletteMap or even simply by applying one of the other filters Flash offers out of the box. Any additional things can be created using PixelBender, which was pointed out by George. The kernel language is a subset of C, so porting classic filters shouldn't be too time consuming. Also alchemy (an LLVM backend targeting Flash Player 10) would be an option worth investigating, although it's not very stable yet.
The biggest part of your app will be a lot of GUI design, GUI implementation, Business Logics etc. Flash is really great when it comes to simple, yet reasonably fast image manipulation and with the Flex framework and MXML you have a powerful tool to productively create the GUI of your app, that can interoperate very well with a multitude of server solutions for virtually any platform.
Also, Flash has a great and active community, offering tons of tutorials, code snippets, libraries and frameworks, and a big ecosystem, with cross-compilation tools to deliver flash content to other platforms (including the upcoming Flash CS5, or the mentioned Elips). I don't understand, where you got the impression, that the Flash platform lacks developement tools. The difference to the .NET suite is that they are provided by a multitude of vendors. The upcoming Flash Player 10.1 was already pointed out by George, but never the less, I wanted to stress, that this makes many of the cross-plattform considerations obsolete.
Last but not least, I'd like to point out Haxe. It allows compiling to SWF, but also to C++, using the very same API provided by NME, to target the iPhone. Also there's work in progress on an android backend. If you're aren't playing to launch within the next 4-5 months, then this is definitely an option.
Your issue is a perfect target for the Haxe programming language. Haxe is written for the web and can compile to JavaScript, Flash and Objective-C (possibly Java/.NET soon).
So you do not choose which platform you are going to invest in but in which language. Haxe is easily adoptable for an AcitonScript programmer.
It makes no sense to run your imageprocessing algorithms in a JavaScript sandbox when Flash is available because it will be much faster. It makes also no sense to run heavy image processing algorithms on a mobile device like the iPhone with JavaScript. I would only support JavaScript as the worst fallback solution.
If you do not like to use Haxe I would go with Flash. You can deploy your Flash application for the iPhone aswell if that is your problem. This is also very great because you get native ARM code. There are actually great tools for professional Flash development available. FDT and IntelliJ IDEA are two of them. The best Haxe IDE is probably FlashDevelop at the moment of writing.
So I would definitly not use JavaScript as the only solution. Haxe is perfect for what you try to achieve. If you do not trust or do not want to invest in Haxe you can use Flash because of the iPhone/iPad export.
Depending on your usecase I would also encourage you to look at cloud hosting like Amazon EC2 and Google AppEngine for instance. Hosting costs are cheap and scaling will be easy for your task. The experience will be much better when it comes to complex operations that can take even a lot of time on a desktop system.
In addition to other answers, another option may be a hybrid solution. For example, use Flash/Silverlight for the majority of your target audience and use server-side processing for those that don't support it (or you could create a native app for iP[hone|ad])
You may have to do something like this anyway as the mobiles you are targetting may have insufficient processing power depending how complex your image processing gets.
Of course you still have the option of upgrading your server which, although you've currently discounted, is probably far cheaper than spending development time creating/deploying/testing a client-side solution.
You can use Silverlight for all Silverlight enabled clients and for non Silverlight clients, do the image processing server side. Since the Silverlight code is C#, you can double compile it to make (mostly)the same code work as Silverlight and non-Silverlight (i.e. server). This gets you the best of both worlds.
You don't say what language "all that code" you'd have to rewrite is in. Might a semiautomated translation to Javascript be practical?
Perhaps you could start out server-side, as CraigS suggests, and then move functions into the client over time instead of rewriting all at once.
Have you checked the editor of Pixlr.com ?
Take a look at their API as well..
The best solution is to use silverlight (so you already have the code ready). If the client can't run it (mobile phones, etc) then process it server-side.
It's the best compromise.
Depends on the type of image processing and the end user experience you are targeting.
As you are looking to target mobile phones your image processing will need to take into consideration the type of handset the user or the receipient has (if messaging via SMS/MMS), as different handsets have different resolution screens and handle different image formats for main images and thumbnails.
I'd suggest that you consider a hybrid cloud architecture as was mentioned in the Microsoft PDC keynotes this year. This would enable you to have your own server(s) to support your application, but if you require additional capacity due you scale out into the cloud using AppFabric.
Additionally, to maximise the market availability of your product pulling the image processing to a common reusable infrastructure allows you to target different platforms, exploiting the positives in each.
I have worked on a solution that hosted its image processing and delivery infrastructure server side and then built different UI offerings allowing sales via desktops, MNOs and AppStores. It can work and from a business perspective can offer economies of scale benefits.
Why not mention Java Applet ?
Good sides are:
almost all browser support ?
need install JRE ?
all OS support
Java provide Java Advanced Image kits, but if c++ dll can be called, that is best (JNI can call c++ dll )
In Python, one of the most popular libraries for image processing is pillow. Through the pyodide project (python running inside browser via emscripten), it's possible to use libraries like pillow and numpy for image (or matrix) processing, and convert the output to a base64 string (via Python standard library). This can then be passed to your <img> html element, either native JS document or with a library like React.
The way I see it, there's no one solution that meets all of your needs. Your best option, imo, is to go with Flash and hope that Adobe sets an agreement with Apple to get Flash on the iPhone/iPad. The major downside, of course, is you'll have to rewrite much of your code.
If the mobile sector isn't absolutely critical, then choose the Silverlight option for reasons you mentioned already. You could also use Silverlight in an out-of-browser mode to work as a desktop application.

What is a good choice for a free Flash Socket Server

I see Red5 which looks nice but it really lacks documentation and since I'm new to using sockets it would be a hassle.
I'm wanting to make a flash chat with audio/video (though just text will work at first) and I enjoy ES but the cheapeast license is $700! I'm a solo developer so the cost is too high.
The main factor is just having good enough documentation for a new comer.
(I use the flash CS4 IDE if that matters)
SmartFoxServer is a good choice. I played around with it a few years ago with AS2, so might be work a look.
They offer a free lite version, but it does not support AS3. I think you need to get the basic plan for that. The pricing plans do look well priced though.
They have some nice documentation and plenty of example.
SmartFoxServer seems to be targeted at multi-player games, but it could be used for your needs.
EDIT*
Just found these Beta AS3 classes for SmartFoxServer. I haven't tried it out for my self though.
EDIT 2*
Another option would be to make your own. It's probably easier than you think if you have a few programming languages under your belt. Of course, this is the kinda thing that can suck your time away.
There are a bunch of tutorials out there for building your own socket server, and some are even specifically for flash. Here are some of the best:
Building a Flash socket server with
Java in five minutes
Python socket server for Flash
XML Sockets / Flash / PHP Based Chat App
Writing Socket Servers in PHP
Asynchronous Socket Programming in C#
I would definitely suggest using C# .net if you have Windows hosting. It would definitely be the simplest to build and would have the best performance. I would stay away from PHP for anything bigger than a chat app, but if that's all you have then go for it.
Try Union. IT's written by one of the best actionscript programmers out there, Colin Moock. The options seem affordable and it's well documented as well.
You can get a free flash socket policy server from https://fsps.rpath.org. I built this appliance for internal use at rPath where I work, but I also maintain it on our free rBuilder Online service. Just click on the Home tab, and download the type of appliance you want (ISO, vmware image, etc.). The Appliance is a full system image including the OS (in this case rPath Linux 2) plus the fsps application.
The policy service resides in the fsps package and runs on the standard Adobe port of 843. By default, it only opens up access to port 443 on the system (https). The policy file served up lives in /usr/share/fsps if you want to change it.