remix-realtime
v0.1.1
Published
Realtime p2p multiplayer for Remix games
Readme
Remix Realtime
Remix Realtime adds realtime multiplayer to your Remix games with 1 extra line of code. This library wraps the @farcade/game-sdk leveraging WebRTC and the Farcade game state as the signaling server to handle routing peer to peer connections between players.
Note: This library is both unofficial and highly experimental
Usage
To use this library in your own game, simply install and replace your sdk import with the following
// import { sdk } from "@farcade/game-sdk";
import { sdk } from "@sam-scolari/remix-realtime";When your game loads, the sdk will automatically detect which players are online and route the peer to peer connections through WebRTC behind the scenes.
To access realtime features use the sdk.realtime property.
// Send custom messages with a type and some data
sdk.realtime.sendMessage("position", {
x: 0,
y: 0
})
// Listen to incoming events from other players
sdk.realtime.on((event) => {
if (event.type === "player_join" || event.type === "player_leave") {
const player = event.userId;
}
// Handle custom message events
if (event.type === "message_recieved") {
const type = event.message.type;
const from = event.message.from;
const data = event.message.data;
}
})AI Prompt
Best Practices
- There is no hard limit on how many players can be active on one session, but try to keep it to 4-8 at any given time.
The realtime WebRTC connections operate in a mesh network. This means that in an 8 player session, each device will be handling 7 simultanious connections. Depending on how much data your game is passing along the network and the type of devices each player is running, WebRTC can start to bottleneck and/or cause serious battery drain. For most games, a sweet spot of 4-8 players is reccomended.
- Game state vs realtime messaging
This library introduces a peer to peer messaging system to create ephemeral state in your games. Any messages sent to and from players won't be persisted between sessions. Avoid saving temporary information such as a players position in your game state to avoid frequent writes and excess bloat.
- Do not mix the
@farcade/game-sdkand@sam-scolari/remix-realtimelibraries
This library extends all the functionality of the @farcade/game-sdk and includes custom logic for efficiently handling and routing peer to peer connections. These connections are signaled through the __realtime key on each games state. Setting game state through the official sdk can unintentionally overwrite this key causing hiccups with new player connections.
