Approximately 15 years ago, in 2004, we released our first commercial version of SmartFoxServer, called SmartFoxServer Basic.
It was the fruit of our previous experience with SmartFoxServer Lite, a free multiplayer server launched one year before on gotoandplay.it, one of the top Flash developer communities of the time.
Fifteen years might not seem much, but in technological terms it feels like ages ago, when things that we give for granted such as Youtube, Instagram or the iPhone didn’t even exist.
In this blog post we’re going to take a look back at evolution of SmartFoxServer since its early days and the many changes and incredible growth of multiplayer gaming in the past 10+ years.
» The early days
SmartFoxServer was one of the first high-performance multiplayer server devoted to web based games, or rather Flash based, since at the time it was the only technology able to deliver games in the browser.
Back in 2003-2004 the idea of multiplayer games running in a browser was still quite outlandish. There were already a few notable examples such as RuneScape, built in Java, or Globulos written in Flash, but they could be counted on the fingers of one hand.
While most triple-A games had their dedicated servers built around them (such as Unreal Tournamente or Quake III Arena) the idea of a general-purpose multiplayer server for different game types was still unfashionable.
In the field of web-based games there were a couple of good commercial solutions and several other open source options that were rudimentary at best. Even the commercial ones had troubles with scalability and one could typically expect to handle a few hundreds clients before running out of steam.
To put things in perspective in those days midrange servers where running Pentium II and III, usually at clock speeds between 500 and 1000Mhz. SmartFoxServer was one of the first solutions based on non-blocking I/O at the time, pushing the scalability way past the few hundred clients into the thousands, even on low tier hardware.
This product was particularly appreciated by larger game studios because of the ability to interface with databases, extend the server with new functionality and integrate with other libraries and SDKs.
In the subsequent years we gained a tremendous amount of experience working with developers of all sizes, learning about their requirments and difficulties with the multiplayer side and improving our products to meet those needs.
SmartFoxServer has been employed in a wide range of scenarios: from teaching the basics of game developments to students, to handling hundres of thousands of players in Cartoon Network, Miniclip or Zynga games. From coordinating artistic installations in museums to helping an astronaut running the London marathon remotely, from the International Space Station.
By 2008-2009 we were already in a new era: the iPhone had started its revolution and the tech experts were looking at the smartphone market with a lot of enthusiasm and expectations. During those years web-based games were going strong with larger and larger players entering the field. Those were the golden years of Miniclip, Kongregate and Zynga, dominating the market and moving tens of thousands of players every day. In the same period Disney’s Club Penguin became one of largest and most successful online community in the world, with SmartFoxServer powering the server side since its birth in 2005.
» Preparing for the next generation
Around 2008 we were doing a lot of research with different network engines to find what could be the new core for the next incarnation of SmartFoxServer. We first experimented with existing solutions such as Apache Mina and Netty but we were disappointed with poor performance, multiple technical issues or instability, especially with the former. So we had to reinvent the wheel.
The new “wheel” was born in 2009, BitSwarm Engine 3.x, after having scrapped a previous redesign of the original SFS PRO engine and having started from scratch. To this day Bitswarm provides a significant edge over most competing, general-purpose network libraries thanks to being fine tuned for handling bursts of small packets, using very few threads and adopting strategies to reduce buffer copies to an absolute minimum.
From there it took an extra year and a half to build SmartFoxServer 2X, adding a slew of new features and building the client API for many new client types. In fact around the time of SFS2X release in 2011, Flash was seeing a lot of competition in the market of web-based gaming, in particular from Unity which provided real and advanced 3D rendering in the browser.
Mobile gaming was also exploding in those years, with many new technologies and APIs becoming popular to simplify the development across multiple OSes.
While SmartFoxServer 1.x was mainly targeted at one platform, SFS2X expanded way past the Flash Player supporting all major languages and target platforms.
The years between 2012 and 2016 have also seen the rise in popularity of different approaches to multiplayer, especially with peer-to-peer solutions. The rationale behind this idea was essentially to get rid of the server side, which brings additional costs, and make use of modern device’s hardware to handle the networking and game logic.
Unfortunately while this approach is viable for certain games, it has also proved to be very limited and cause a whole set of issues that aren’t usually worth the trade-off. Wihout a central server cheating is very hard to fight, laggy networks affect all players, host advantage causes game imbalances and sudden host disconnections lead to slowdown for all participants.
Many general-purpose solutions have since popped into existence, attempting to simplify the multiplayer aspect via p2p APIs and usually targeting Unity, since UNet has seen intermittent popularity. These products are often marketed as approachable by anyone even with no experience in server-based games, or no coding experience at all (!). The reality is that there’s a limit to how much a certain task can be simplified before it becomes trivialized and fails to deliver what’s needed.
These services attempt to hide all the complexity behind the game state synchronization offering little flexibility, and basing all the game logic on the client side. As soon as developers need to defend the game from cheaters, improve bad multiplayer performance, or integrate custom services they are left to their own devices and with very few choices.
A notorious example of these p2p issues on a large scale is Ubisoft’s “For Honor”, a triple-A, online, multiplayer fighting game (released in 2017) that ended up disappointing a lot of players due to many of the aforementioned problems.
Unity itself has been mainly focused on the p2p approach with their integrated UNet multiplayer API. Ultimately they had to give up and go back to the drawing board, admitting that a server-centric model is indeed the proper way to handle the multiplayer side of things. Especially for the kind of games that Unity is aiming to support.
Generally speaking multiplayer development is not easy, but it also doesn’t need to be seen as some sort of dark, esoteric art. This is why products like SmartFoxServer 2X and similar solutions exist: they provide a high level client/server API that offer all the tools to build any kind of online game. A good solution shouldn’t burden the developer with tasks that don’t concern them (such as managing message queues or dealing with I/O thread performance) but it also should provide all the tools that are necessary to fine tune the product, from security to interoperabilty, performance, integration etc.
» Looking forward
SmartFoxServer 2X has been a successful product for the past 8+ years and we’ve kept improving it release after release, thanks also to the many suggestions from users and customers.
More recently, over the course of the last 16 months, we’ve started working on a parallel project, code name “Overcast“, that will soon join the SmartFoxServer line of products.
With Overcast we aim at providing an alternative way of deploying SmartFoxServer 2X that is fully cloud-based. Instead of obtaining the software and managing it on your own servers, Overcast allows users to deploy any number of SFS2X instances in the cloud, world-wide, with a simple web-based interface. Additionally the system allows to connect one or more database instances to the game servers, offering a complete platform to deploy your multiplayer games, at any scale.
If you’re interested in learning more about Overcast make sure to follow us via social media, this blog and our newsletter. We’ll be publishing more updates and news during the course of the next months.