Multiplayer Game Server for Node.js. View documentation.
Read the blog post to understand the motivation behind this project.
Features / Characteristics
- WebSocket-based communication
- Binary delta compressed state (through msgpack / fossil-delta-js)
- Custom room handlers
- Lag compensation (using timeframe, a Timeline implementation) - Not automatic. You should apply the technique as you need, in the client and/or the server.
- Official Examples - Official examples for learning purposes.
- tanx (source-code) - Multiplayer tanks game, originally from PlayCanvas
- tic-tac-toe (source-code) - Simple Tic Tac Toe using pixi.js
- LD35 entry: dotower (source-code) - Simple experimental MOBA using pixi.js
- React Example (source-code) - Example integrating with ReactJS state
Room handler API
- clock - A
- timeline - A
- clients - Array of connected clients
Room handlers must implement all these methods.
- 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
Room handlers have these methods available.
- 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.
Support us with a monthly donation and help us continue our activities. [Become a backer]
Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]