SlideShare a Scribd company logo
Create online games with
node.js and socket.io
Disclaimer
Agenda
• Example 1: a simple MMOCPG
Massively Multiplayer Online Click-Playing Game
by Krasimir Tsonev
• Example 2: a Connect 4 game
Adaptations for a 2-Player Game
by Gérard Tyedmers
• Various
• Beer
History: From Word to Web
• Am Anfang war das Word
History: From Word to Web
• HTML5 WebApp
Online Game
with NodeJS and Socket.io
• by Krasimir Tsonev
• http://krasimirtsonev.com/blog/article/Real-
time-chat-with-NodeJS-Socketio-and-
ExpressJS
Install Node and Modules
• Get Node.js from nodejs.org
• node-v0.10.26-x64
• Socket.io for real time communication
• moniker to generate random names
Install Node and Modules
• Create File „package.json“:
{
"name": "SocketioExample",
"version": "0.0.1",
"description": "SocketioExample",
"dependencies": {
"socket.io": "0.9.16",
"moniker": "0.1.2"
},
"author": "dev"
}
• Run „npm install“ in the diretory of your file
Structure of the game
index.js - Server
page.html - Client
Structure of the game
index.js - Server
• connection
• disconnect
• click
page.html - Client
Structure of the game
index.js - Server
• connection cerate user, add user to users
• disconnect remove user from users
• click add 1 point, broadcast to users
page.html - Client
Structure of the game
index.js - Server
• connection cerate user, add user to users
• disconnect remove user from users
• click add 1 point, broadcast to users
page.html - Client
• HTML containers
• Script
Structure of the game
page.html
• HTML containers
– Welcome Message
– Progress Bar (clickable)
– Users List
• Script
– Connect to Server
– Get Welcome Message
– Get Users List
– Send Click
– Get Progress
Structure of the game
• Client: var socket = io.connect('http://localhost:3250');
• Server: io.sockets.on('connection', function (socket) {
• Client: progress.onclick = function() { socket.emit("click");
• Server: socket.on("click", function() {
• Server: io.sockets.emit("update", {currWidth: currWidth});
• Client: socket.on('update', function (data) {
page.html
<!DOCTYPE html>
<html>
<head>
<title>Real time game</title>
<style type="text/css"> ... styles here… </style>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
... game logic here …
</script>
</head>
page.html
<body class="main">
<div id="welcome"></div>
<hr />
<div id="progress"></div>
<div id="win">150</div>
<hr />
<div id="users"></div>
<hr />
<div id="results">
</div>
</body>
</html>
page.html
window.onload = function() {
var welcome = document.getElementById("welcome");
var allUsers = document.getElementById("users");
var progress = document.getElementById("progress");
var results = document.getElementById("results");
var socket = io.connect('http://localhost:3250');
page.html
socket.on('welcome', function (data) { console.log(data);
welcome.innerHTML = "Welcome to the game <strong>" +
data.name + "</strong>„; });
socket.on('users', function (data) { allUsers.innerHTML =
"<strong>Users:</strong> " + data.users; });
socket.on('update', function (data) { progress.innerHTML =
data.currentWidth; progress.style.width =
parseInt(data.currentWidth) + "px"; });
socket.on('win', function (data) { results.innerHTML =
data.message; });
progress.onclick = function() { socket.emit("click"); } }
index.js
var handler = function(req, res) {
fs.readFile('./page.html', function (err, data) {
if(err) throw err;
res.writeHead(200);
res.end(data);
});
}
index.js
var app = require('http').createServer(handler);
var io = require('socket.io').listen(app);
var fs = require('fs');
var Moniker = require('moniker');
var port = 3250;
app.listen(port);
index.js
io.sockets.on('connection', function (socket) {
var user = addUser();
updateWidth();
socket.emit("welcome", user);
socket.on('disconnect', function () {
removeUser(user);
});
socket.on("click", function() {
…
});
});
index.js
socket.on("click", function() {
currentWidth += 1;
user.clicks += 1;
if(currentWidth == winWidth) {
currentWidth = initialWidth;
io.sockets.emit("win", { message: "<strong>" +
user.name + "</strong> rocks!" });
}
updateWidth();
updateUsers();
});
});
index.js
var initialWidth = 20;
var currentWidth = initialWidth;
var winWidth = 150;
var users = [];
var addUser = function() {
var user = { name: Moniker.choose(), clicks: 0 }
users.push(user);
updateUsers();
return user;
}
index.js
var removeUser = function(user) {
for(var i=0; i<users.length; i++) {
if(user.name === users[i].name) { users.splice(i, 1);
updateUsers(); return; }
}
}
index.js
var updateUsers = function() {
var str = '';
for(var i=0; i<users.length; i++) {
var user = users[i];
str += user.name + ' <small>(' + user.clicks + '
clicks)</small> ';
}
io.sockets.emit("users", { users: str });
}
var updateWidth = function() {
io.sockets.emit("update", { currentWidth: currentWidth });
}
Online Connect 4
with NodeJS and Socket.io
• by Gérard Tyedmers
• grrd01.github.io/4inaRow/
Strucure of the game
HTML Click Result
• One server
• One game
• Same screen/result for all
• Broadcasting to all
Strucure of the game
HTML Click
HTML
Click
Result
Result
Result
WaitClick
Connecting
• <script src="/socket.io/socket.io.js"></script>
• var socket = io.connect('http://localhost:3250');
Connecting
• <script src="/socket.io/socket.io.js"></script>
• var socket = io.connect('http://localhost:3250');
• <script type="text/javascript"
src="http://grrds4inarow.nodejitsu.com:80/socket.io
/socket.io.js"></script>
• var socket =
io.connect('http://grrds4inarow.nodejitsu.com:80');
• socket.disconnect();
• socket.socket.reconnect();
Starting Games
var startgame = function(user) {
for(var i=0; i<users.length; i++) {
if (i == users.length-1) { // kein freier Gegner
io.sockets.socket(users[i].id).emit("connect", users[i]);
} else { // Gegner vorhanden
if (users[i].opponent == null) {
users[i].opponent = users[users.length-1].id;
users[i].role = "0";
io.sockets.socket(users[i].id).emit("startgame", users[i]);
users[users.length-1].opponent = users[i].id;
users[users.length-1].role = "1";
io.sockets.socket(users[users.length-1].id)
.emit("startgame",users[users.length-1]);
break;
} } } }
Playing
Sender
socket.emit('playsend', {to: user.opponent,col: spaltenr, round:
countround});
Server
socket.on("playsend", function (data) {
io.sockets.socket(data.to).emit("playget", data);
});
Reciever
socket.on('playget', function (data) {
if (countround == data.round && lastround != data.round) {
lastround = data.round;
spielzug(data.col);
}
});
Host your app
• http://localhost
• your own web-server
• node.js hoster
https://www.nodejitsu.com/

More Related Content

PDF
Getting started with DataStax .NET Driver for Cassandra
PDF
MoSQL: More than SQL, but less than ORM
PDF
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
PPTX
Token Based Authentication Systems
PPT
PHP Cookies, Sessions and Authentication
PPTX
NoSQL - Hands on
PPT
PHP - Introduction to PHP Cookies and Sessions
Getting started with DataStax .NET Driver for Cassandra
MoSQL: More than SQL, but less than ORM
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
Token Based Authentication Systems
PHP Cookies, Sessions and Authentication
NoSQL - Hands on
PHP - Introduction to PHP Cookies and Sessions

What's hot (20)

PPTX
PHP Cookies and Sessions
PDF
Cache is King - RubyHACK 2019
PDF
Build Your Own WebAssembly Compiler
PPTX
Cookie and session
PPTX
Browser based games
PDF
Introduction to php web programming - sessions and cookies
PPT
Php ssession - cookies -introduction
PPTX
HTML5 Games with CreateJS
PPSX
Sessions and cookies
PDF
watchOS 2でゲーム作ってみた話
PPTX
20141011 mastering mysqlnd
KEY
Building Dojo in the Cloud
PPTX
Session and Cookies
PPT
PPTX
Sessions in php
PPTX
java Cookies
PDF
2014 database - course 3 - PHP and MySQL
PDF
smartdc by Ruby
PPTX
Firebase not really_yohoho
PPT
Cookies and sessions
PHP Cookies and Sessions
Cache is King - RubyHACK 2019
Build Your Own WebAssembly Compiler
Cookie and session
Browser based games
Introduction to php web programming - sessions and cookies
Php ssession - cookies -introduction
HTML5 Games with CreateJS
Sessions and cookies
watchOS 2でゲーム作ってみた話
20141011 mastering mysqlnd
Building Dojo in the Cloud
Session and Cookies
Sessions in php
java Cookies
2014 database - course 3 - PHP and MySQL
smartdc by Ruby
Firebase not really_yohoho
Cookies and sessions
Ad

Similar to Create online games with node.js and socket.io (20)

PDF
soft-shake.ch - Hands on Node.js
PPT
Pushing the Boundaries of Sencha and HTML5′s WebRTC
PDF
Nodejs and WebSockets
PDF
Introduction to REST API with Node.js
KEY
Node worshop Realtime - Socket.io
PDF
Node azure
PPT
Every Click Counts (But All the Money Goes to Me)
PDF
Introduction to Node.js
PPTX
Intro to node and mongodb 1
PPTX
Web____Dev_____Bootcamp____Presentationn
PDF
Arduino and the real time web
PPT
Ember.js Tokyo event 2014/09/22 (English)
KEY
Paris js extensions
PPTX
A miało być tak... bez wycieków
PDF
Aprimorando sua Aplicação com Ext JS 4 - BrazilJS
PDF
Building interactivity with websockets
PDF
5.node js
PPTX
Ext JS Introduction
PPTX
Drive chrome(headless) with puppeteer
PPTX
[CB16] Esoteric Web Application Vulnerabilities by Andrés Riancho
soft-shake.ch - Hands on Node.js
Pushing the Boundaries of Sencha and HTML5′s WebRTC
Nodejs and WebSockets
Introduction to REST API with Node.js
Node worshop Realtime - Socket.io
Node azure
Every Click Counts (But All the Money Goes to Me)
Introduction to Node.js
Intro to node and mongodb 1
Web____Dev_____Bootcamp____Presentationn
Arduino and the real time web
Ember.js Tokyo event 2014/09/22 (English)
Paris js extensions
A miało być tak... bez wycieków
Aprimorando sua Aplicação com Ext JS 4 - BrazilJS
Building interactivity with websockets
5.node js
Ext JS Introduction
Drive chrome(headless) with puppeteer
[CB16] Esoteric Web Application Vulnerabilities by Andrés Riancho
Ad

Recently uploaded (20)

PDF
Tally Prime Crack Download New Version 5.1 [2025] (License Key Free
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
PPTX
Advanced SystemCare Ultimate Crack + Portable (2025)
PPTX
Oracle Fusion HCM Cloud Demo for Beginners
PDF
Cost to Outsource Software Development in 2025
PDF
17 Powerful Integrations Your Next-Gen MLM Software Needs
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PPTX
Reimagine Home Health with the Power of Agentic AI​
PPTX
Monitoring Stack: Grafana, Loki & Promtail
PPTX
Patient Appointment Booking in Odoo with online payment
PPTX
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
PDF
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
PDF
Complete Guide to Website Development in Malaysia for SMEs
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
Website Design Services for Small Businesses.pdf
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PDF
CapCut Video Editor 6.8.1 Crack for PC Latest Download (Fully Activated) 2025
PDF
Nekopoi APK 2025 free lastest update
Tally Prime Crack Download New Version 5.1 [2025] (License Key Free
Operating system designcfffgfgggggggvggggggggg
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
Advanced SystemCare Ultimate Crack + Portable (2025)
Oracle Fusion HCM Cloud Demo for Beginners
Cost to Outsource Software Development in 2025
17 Powerful Integrations Your Next-Gen MLM Software Needs
wealthsignaloriginal-com-DS-text-... (1).pdf
Reimagine Home Health with the Power of Agentic AI​
Monitoring Stack: Grafana, Loki & Promtail
Patient Appointment Booking in Odoo with online payment
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
Complete Guide to Website Development in Malaysia for SMEs
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Navsoft: AI-Powered Business Solutions & Custom Software Development
Website Design Services for Small Businesses.pdf
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
CapCut Video Editor 6.8.1 Crack for PC Latest Download (Fully Activated) 2025
Nekopoi APK 2025 free lastest update

Create online games with node.js and socket.io

  • 1. Create online games with node.js and socket.io
  • 3. Agenda • Example 1: a simple MMOCPG Massively Multiplayer Online Click-Playing Game by Krasimir Tsonev • Example 2: a Connect 4 game Adaptations for a 2-Player Game by Gérard Tyedmers • Various • Beer
  • 4. History: From Word to Web • Am Anfang war das Word
  • 5. History: From Word to Web • HTML5 WebApp
  • 6. Online Game with NodeJS and Socket.io • by Krasimir Tsonev • http://krasimirtsonev.com/blog/article/Real- time-chat-with-NodeJS-Socketio-and- ExpressJS
  • 7. Install Node and Modules • Get Node.js from nodejs.org • node-v0.10.26-x64 • Socket.io for real time communication • moniker to generate random names
  • 8. Install Node and Modules • Create File „package.json“: { "name": "SocketioExample", "version": "0.0.1", "description": "SocketioExample", "dependencies": { "socket.io": "0.9.16", "moniker": "0.1.2" }, "author": "dev" } • Run „npm install“ in the diretory of your file
  • 9. Structure of the game index.js - Server page.html - Client
  • 10. Structure of the game index.js - Server • connection • disconnect • click page.html - Client
  • 11. Structure of the game index.js - Server • connection cerate user, add user to users • disconnect remove user from users • click add 1 point, broadcast to users page.html - Client
  • 12. Structure of the game index.js - Server • connection cerate user, add user to users • disconnect remove user from users • click add 1 point, broadcast to users page.html - Client • HTML containers • Script
  • 13. Structure of the game page.html • HTML containers – Welcome Message – Progress Bar (clickable) – Users List • Script – Connect to Server – Get Welcome Message – Get Users List – Send Click – Get Progress
  • 14. Structure of the game • Client: var socket = io.connect('http://localhost:3250'); • Server: io.sockets.on('connection', function (socket) { • Client: progress.onclick = function() { socket.emit("click"); • Server: socket.on("click", function() { • Server: io.sockets.emit("update", {currWidth: currWidth}); • Client: socket.on('update', function (data) {
  • 15. page.html <!DOCTYPE html> <html> <head> <title>Real time game</title> <style type="text/css"> ... styles here… </style> <script src="/socket.io/socket.io.js"></script> <script type="text/javascript"> ... game logic here … </script> </head>
  • 16. page.html <body class="main"> <div id="welcome"></div> <hr /> <div id="progress"></div> <div id="win">150</div> <hr /> <div id="users"></div> <hr /> <div id="results"> </div> </body> </html>
  • 17. page.html window.onload = function() { var welcome = document.getElementById("welcome"); var allUsers = document.getElementById("users"); var progress = document.getElementById("progress"); var results = document.getElementById("results"); var socket = io.connect('http://localhost:3250');
  • 18. page.html socket.on('welcome', function (data) { console.log(data); welcome.innerHTML = "Welcome to the game <strong>" + data.name + "</strong>„; }); socket.on('users', function (data) { allUsers.innerHTML = "<strong>Users:</strong> " + data.users; }); socket.on('update', function (data) { progress.innerHTML = data.currentWidth; progress.style.width = parseInt(data.currentWidth) + "px"; }); socket.on('win', function (data) { results.innerHTML = data.message; }); progress.onclick = function() { socket.emit("click"); } }
  • 19. index.js var handler = function(req, res) { fs.readFile('./page.html', function (err, data) { if(err) throw err; res.writeHead(200); res.end(data); }); }
  • 20. index.js var app = require('http').createServer(handler); var io = require('socket.io').listen(app); var fs = require('fs'); var Moniker = require('moniker'); var port = 3250; app.listen(port);
  • 21. index.js io.sockets.on('connection', function (socket) { var user = addUser(); updateWidth(); socket.emit("welcome", user); socket.on('disconnect', function () { removeUser(user); }); socket.on("click", function() { … }); });
  • 22. index.js socket.on("click", function() { currentWidth += 1; user.clicks += 1; if(currentWidth == winWidth) { currentWidth = initialWidth; io.sockets.emit("win", { message: "<strong>" + user.name + "</strong> rocks!" }); } updateWidth(); updateUsers(); }); });
  • 23. index.js var initialWidth = 20; var currentWidth = initialWidth; var winWidth = 150; var users = []; var addUser = function() { var user = { name: Moniker.choose(), clicks: 0 } users.push(user); updateUsers(); return user; }
  • 24. index.js var removeUser = function(user) { for(var i=0; i<users.length; i++) { if(user.name === users[i].name) { users.splice(i, 1); updateUsers(); return; } } }
  • 25. index.js var updateUsers = function() { var str = ''; for(var i=0; i<users.length; i++) { var user = users[i]; str += user.name + ' <small>(' + user.clicks + ' clicks)</small> '; } io.sockets.emit("users", { users: str }); } var updateWidth = function() { io.sockets.emit("update", { currentWidth: currentWidth }); }
  • 26. Online Connect 4 with NodeJS and Socket.io • by Gérard Tyedmers • grrd01.github.io/4inaRow/
  • 27. Strucure of the game HTML Click Result • One server • One game • Same screen/result for all • Broadcasting to all
  • 28. Strucure of the game HTML Click HTML Click Result Result Result WaitClick
  • 29. Connecting • <script src="/socket.io/socket.io.js"></script> • var socket = io.connect('http://localhost:3250');
  • 30. Connecting • <script src="/socket.io/socket.io.js"></script> • var socket = io.connect('http://localhost:3250'); • <script type="text/javascript" src="http://grrds4inarow.nodejitsu.com:80/socket.io /socket.io.js"></script> • var socket = io.connect('http://grrds4inarow.nodejitsu.com:80'); • socket.disconnect(); • socket.socket.reconnect();
  • 31. Starting Games var startgame = function(user) { for(var i=0; i<users.length; i++) { if (i == users.length-1) { // kein freier Gegner io.sockets.socket(users[i].id).emit("connect", users[i]); } else { // Gegner vorhanden if (users[i].opponent == null) { users[i].opponent = users[users.length-1].id; users[i].role = "0"; io.sockets.socket(users[i].id).emit("startgame", users[i]); users[users.length-1].opponent = users[i].id; users[users.length-1].role = "1"; io.sockets.socket(users[users.length-1].id) .emit("startgame",users[users.length-1]); break; } } } }
  • 32. Playing Sender socket.emit('playsend', {to: user.opponent,col: spaltenr, round: countround}); Server socket.on("playsend", function (data) { io.sockets.socket(data.to).emit("playget", data); }); Reciever socket.on('playget', function (data) { if (countround == data.round && lastround != data.round) { lastround = data.round; spielzug(data.col); } });
  • 33. Host your app • http://localhost • your own web-server • node.js hoster https://www.nodejitsu.com/