mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 10:37:34 +00:00
A fantastic multiplayer action browser game
http://chuck-game.tumblr.com
Socket.IO (TCP) holds back later packets while it retransmits a lost one, which stalls worldUpdate delivery on lossy long-distance links — exactly the pattern game state suffers worst from. WebRTC DataChannels in unreliable mode (ordered:false, maxRetransmits:0) drop late packets instead of queueing them, which is what we want for high-frequency state sync. Adds a per-user WebRTCTransport on top of the existing Socket.IO connection. Socket.IO stays in charge of bootstrap, signaling (SDP/ICE exchange), and control messages — only gameCommand payloads get routed onto the unreliable channel once it's open. If WebRTC fails to negotiate, gameCommand transparently falls back to Socket.IO, so the game keeps working unchanged. A new StatsLogger writes per-session JSONL events (session_start, webrtc_ready with negotiation time, per-second stats with transport, RTT samples, recv/send rates, seq gaps) so we can compare real-world runs (e.g. Germany server <-> Korea client) instead of guessing. URL flag ?webrtc=0 forces fallback for A/B testing. scripts/webrtc-browser-test.js spins up a headless Chromium against a freshly-started server and asserts the unreliable channel opens and gameCommand traffic actually rides it. |
||
|---|---|---|
| app | ||
| config | ||
| lab | ||
| poc-webrtc | ||
| scripts | ||
| snippets | ||
| static | ||
| .floo | ||
| .gitignore | ||
| channel.js | ||
| client.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| server.js | ||
chuck.js
Physical JavaScript Action Browser Multiplayer Game - it will be awesome!
Follow the development at http://chuck-game.tumblr.com/
How to run:
git clone https://github.com/logsol/chuck.js.gitcd chuck.jsnpm installnode server.js [port] [log level]
Open in browser http://localhost:1234
This game is licensed under the GPLv3 licence http://www.gnu.org/licenses/gpl-3.0.html