Skip to content

Minimalist Multiplayer Game Server for Node.js.

License

Notifications You must be signed in to change notification settings

mmazzini/colyseus

 
 

Repository files navigation

colyseus

Join the chat at https://gitter.im/gamestdio/colyseus Build Status

Minimalist Multiplayer Game Server for Node.js. View documentation.

Live demos:

Features

  • WebSocket-based communication
  • Room instantiation
  • Binary data transfer (through msgpack)
  • Delta-encoded state broadcasts (through fast-json-patch - RFC6902)
  • Lag compensation (using timeframe, a Timeline implementation)
    • (Not automatic. You should apply the technique as you need, in the client and/or the server.)

TODO:

  • "area of interest" updates/broadcasts

Room instantiation diagram:

Room instantiation diagram

Room state diagram:

Room state diagram

Room API

Properties

  • clock - A ClockTimer instance
  • timeline - A Timeline instance (see useTimeline)
  • clients - Array of connected clients

Methods you should implement

  • onJoin (client) - When a client joins the room
  • onLeave (client) - When a client leaves the room
  • onMessage (client, data) - When a client send a message
  • onDispose () - Cleanup callback, called after there's no more clients on the room

Available methods

  • setState( object ) - Set the current state to be broadcasted / patched.
  • setSimulationInterval( callback[, milliseconds=16.6] ) - (Optional) Create the simulation interval that will change the state of the game. Default simulation interval: 16.6ms (60fps)
  • setPatchRate( milliseconds ) - Set frequency the patched state should be sent to all clients. Default is 50ms (20fps).
  • useTimeline([ maxSnapshots=10 ]) - (Optional) Keep state history between broadcatesd patches.
  • send( client, data ) - Send data to a particular client.
  • lock() - Lock the room to new clients.
  • unlock() - Unlock the room to new clients.
  • broadcast( data ) - Send data to all connected clients.
  • disconnect() - Disconnect all clients then dispose.

Production usage

It's recommended to use a process manager to ensure the server will reload in case your application goes down.

pm2 start server.js --node-args="--harmony"

Redirect port 80 to target deployment port (e.g. 3000), to avoid running harmful code as sudoer: (read more)

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

License

MIT

About

Minimalist Multiplayer Game Server for Node.js.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%