Hi nutmix,
tl;dr: use NodeJS - never ever even think about some other way (incl. services like Photon, etc.; Java, PHP, neighbors cat or whatever comes into mind) to realize a real-time-multiplayer backend! Just don't (speaking of the "state-of-the-art" in 2017)! If you ignore my suggest and do, you'll regret it some day as bad as possible.
if you have the knowledge and ressources to eigther get a hosting service or host a server yourself (a virtual one, because a dedicated one would be an overkill for this) (think about security, etc.!), then I'ld suggest you in any case the usage of NodeJS.
Not only, that you can literally do anything with node; its powerful, super fast (heres a comparison with Apache, for example) and scalable untill you go nuts.
You need a database for your project/Node backend? Download MongoDB (its free), and create a RESTful api (commonly "express" (routing/http middleware) or a CRUD interface will let your backend instantly turn into something dynamic, accepting requests from the outside (clients, ...). Combined with, e.g. "mongoos" (ORM mapped gateway/interface for MongoDB, which makes easy stuff even more easyier - like creating schemes for your tables, etc.), you then will have everything you need, nearly out of the box.
Great thing about node is, that there are many tutorials... Ild suggest you to start with "best practices" for node in general; this will show you how node works and where you have to pay attention in your code (especially regarding performance and stuff). With some little tweeks, a node server can be a powerfull backend for everything, regardeless if you communicate over http/https or with sockets, etc.
Colyseus is, for example, a great open source framework (not only for games): http://gamestd.io/colyseus/ (git: https://github.com/gamestdio/colyseus). Theres also a plugin for Construct 2 and a documentation for it (the dev also got a channel on slack, if there are any problems/questions). Btw: I'm also using Colyseus for my current project - its one of the best frameworks (when it comes to real time communication (its based on/using socket.io - https://socket.io/) I've discovered so far.
Colyseus only offers websocket communications - if you, for example, also need a http-support (or web-frontend in general), you could implement your own middleware or use an another framework (like: total.js (https://docs.totaljs.com/latest/en.html ... %20started) - its also great, fast, open and supports websockets, as well as ajax, etc.)... important (at least I'm really suggesting it): use a socket-based communication for your clients. With the help of a REST api (AJAX), a real-time multiplayer game is also possible, but sockets are mind-blowing fast and easy to use.
Within the past years Ive nearly forgotten the existence of any other language beside JS, because node is the only thing I'm using - because it covers literally anything (I need).
2. node.js
c) very basic DB support?
NodeJS itself has no DB support, correct. But with a middleware/driver (
Starting from local plain data files like csv or binary NoSQL (serversided - and clientsided, if you got an api server or something) up to SQL (MSSQL, MySQL,...) and NoSQL (MongoDB, Postgre,...) - or your very own developed database type/server, anything can be connected and used in your NodeJS application/project.
For example: searching MSSQL interface? Click here: https://www.npmjs.com/search?q=mssql&pa ... ng=optimal
2. node.js
d) no backoffice UI support.
Same as above: NodeJS only got its console by stock, where you can console.log('I am a white line of printed text').
Depending on what kind of UI you want to have:
- WebUI: use "express" as middleware for the web; create a login routine for admins/supporter, create your HTML files for admin UI, route them with express (taking care of auth-token or similar within routing) and you got your admin WebUI
- Want to write your UI in any other language? Then do the same as above, without HTML files, create an api (RESTful, or a CRUD support, etc.) and let anything speak with your backend, anytime, anywhere (need cors? Also no problem, express features it out of the box)
- Even if you need some other communication between backend (or db, or whatever) and backoffic - I'm sure that there is at least one (simple) way of doing so
Also, same as above, take a look here: https://www.npmjs.com/search?q=backoffi ... ng=optimal
2. node.js
e) researching this, it seems node is single threaded. Thus critical game timers would wait on the same event queue as incomming messages. Nodes "solution" to this is to cluster addtional forked worker processes. Inter-process communication between these forked processes goes through the parent "master" in the form of messages, which is not scalable. The general solution is to have another layer of servers with the game logic, and use RPC or sockets to connect the "front end" node processes with backend game logic servers. Checkout pomelo for an example of this https://github.com/NetEase/pomelo/wiki/ ... k-overview
Again, same as above (what suprise <img src="{SMILIES_PATH}/icon_e_biggrin.gif" alt=":D" title="Very Happy">):
Vanilla NodeJS is always single threaded. But... (I think you know what follows), there are (more than one) solutions.
NodeJS already has a built in cluster-feature (docs: https://nodejs.org/api/cluster.html#clu ... w_it_works) with which you can, e.g., create a highly scalable webserver (Tutorial: https://www.sitepoint.com/how-to-create ... your-apps/).
You could also use development/cli plugins, for, e.g. running multiple instances paralell, which load-balances themselves, etc... there are than enough ways.
Even the ablity to make JavaScript asynchronious is possible...
With the depency "pug" you can use the HTML-template engine Jade (do I have to say "out of the box" again?) for your whole Web-frontend (or parts - or just single site or a single url), ...
How I said earlier: for me, NodeJS covers anything I need - and is the "type of server" I recommended everyone who asked in the past years.
Hope that I helped you out a bit - if I wrote bullshit on some part (not readable/understandable/unclear) or if you got more questions which I possibly could answer, just answer back here or write me a pm - I'll try my best! <img src="{SMILIES_PATH}/icon_e_wink.gif" alt=";)" title="Wink">
Have a great day,
Proxy
Edit: for my current project I created two backend servers, "logic" and "storage", which are communicating together. If a client requests for example something out of the database, the request is routed:
Client -------request-------> backend(logic) -------request-------> backend(storage) -------request-------> MongoDB
and the according response is delivered:
MongoDB ------response-----> backend(storage) ------response-----> Client
backend(storage) has the chance to talk directly with the client, when backend(logic) also transfered its ID to the backend(storage) - so there is no impact on backend(logic) for DB-related requests - as long as there is no data-processing needed (motion sync, calculating "damage done" after attacks, etc. is routed over the backend(logic) - otherwise there would be no "cheat/inject protection", etc..
Just for giving you a small example - hopefully its understandable what I wrote (my english isnt the best <img src="{SMILIES_PATH}/icon_e_biggrin.gif" alt=":D" title="Very Happy">).