Prototype scalable multiplayer world architecture

Job ID: 33697552

Budget: £1,500 – £3,000 GBP

I am looking for a very experienced backend Java developer to assist in the development of a new multiplayer simulation/game server. The candidate needs to be experienced in database technology, distributed computing and building scalable solutions.

This work is to build a technology demonstrator for a massively scalable online simulation project. The best way of explaining this is the game Asteroids but a vast multiplayer world.

The solution needs to use open-source software only where possible.

The simulation consists of a single large persistant 2d world. Within this world are simple 2d objects/shapes which persist.

Clients can register and connect with the simulation and a 2d shape is created to represent them. The client is only aware of objects within a specific nearby range.

A client can send commands to the object to make it move or rotate the shape (such as pressing the WASD keys, W to increase acceleration, S to reverse, Z to slow down, A and D to rotate). Collision detection is carried out serverside on nearby objects to see if the move is acceptable as no two objects can be located in the same space. The objects will not be moving fast and client side prediction will be used to determine their positions between updates from the server.

When an object moves or changes state, other clients who are nearby within range need to be informed and updated.

The world also contains 2d objects/shapes which are static and not associated with a client.

When a client disconnects, the shape which represents them persists in the world.

The platform is a single world in which all clients and objects exist in the same simulated world.

Every single object has lifecycle processes which are running on them while the world is active. These include processes such as checking the age of the object to see if it is due to expire.

The world state needs to be persisted in some form of database.

When the platform is brought online these objects need to be loaded into the world.

When an object moves into the vacinity of the client, it is informed of the object by the server and while it is within the 'view range' and also will recieve updates to that objects state. When an object leaves a clients view range, it will be removed from the view and they will no longer receive updates/changes to its state.

The prototype front end 2D client will be a web browser client developed by another developer using a simple 2d engine such as phaser.io . This web client will connect to the server using web sockets through which it will receive information on the world and send commands to the clients object.The platform needs to have the required code to accept these web socket connections from the client

The platform needs to be scalable, both in the number of clients that can connect, and the number of objects in the world.

This scaling would take place by increasing the number of servers and so the platform needs to involve some form of multi server architecture which will allow it to scale.

An initial idea for how this would be achieved would be similar to spatialOS which allows for scaling by dividing the events, world actions and processes across worker threads on multiple servers.

I am interested in hearing proposals on the solution. The initial work will be a prototype demonstrator of the platform to demonstrate the scaling and testing tools which demonstrate its load capabilities. Which if successful will lead to a larger project and more work.

The specific tasks will be:
- Present a design for the server architecture
- Determine the specification of the messaging protocol which the client and server will exchange during the course of the user experience
- Build a simple prototype server architecture along with testing apps which can demonstrate this scaling in objects in the world, and the number of web socket connections / clients that can connect