Intercettare gli eventi in Socket.io
Con Socket.io è possibile intercettare / emettere eventi, ed agire di conseguenza.
Ne vediamo tre esempi.
Il primo riguarda l'evento message, che è un evento built-in del framework:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function (req, res) {
res.sendFile('index.html', {root: __dirname});
});
io.on('connection', function (socket) {
console.log('A user connected');
setTimeout(function () {
socket.send("Messaggio dopo 3 secondi");
}, 3000);
socket.on('disconnect', function () {
console.log('A user disconnected');
});
});
http.listen(3000, function () {
console.log('listening on *:3000');
});
Questo il file HTML:
<!DOCTYPE html>
<html>
<head>
<title>Test Socket.io</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('message', function (data) {
document.write(data);
});
</script>
</head>
<body>
<div>Qui arriverà il messaggio</div>
</body>
</html>
Avviate il programma, e navigate col browser sulla pagina; dopo tre secondi comparirà il messaggio sulla pagina.
Possiamo anche crearci noi degli eventi:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function (req, res) {
res.sendFile('index.html', {root: __dirname});
});
io.on('connection', function (socket) {
console.log('A user connected');
setTimeout(function () {
socket.emit('evento_test', {description: 'Questo è un evento di test!'});
}, 5000);
socket.on('disconnect', function () {
console.log('A user disconnected');
});
});
http.listen(3000, function () {
console.log('listening on *:3000');
});
La pagina verrà modificata così:
<!DOCTYPE html>
<html>
<head>
<title>Test Socket.io</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('evento_test', function (data) {
document.write(data.description);
});
</script>
</head>
<body>
<div>Qui arriverà il messaggio</div>
</body>
</html>
Infine, possiamo anche mandare degli eventi dal client; anche qui usiamo un evento built-in (clientEvent):
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function (req, res) {
res.sendFile('index.html', {root: __dirname});
});
io.on('connection', function (socket) {
console.log('A user connected');
socket.on('clientEvent', function (data) {
console.log(data);
});
socket.on('disconnect', function () {
console.log('A user disconnected');
});
});
http.listen(3000, function () {
console.log('listening on *:3000');
});
Questa la pagina:
<!DOCTYPE html>
<html>
<head>
<title>Test Socket.io</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.emit('clientEvent', 'Sent an event from the client!');
</script>
</head>
<body>
<div>Qui arriverà il messaggio</div>
</body>
</html>
Controllate in console.
Ovviamente è possibile combinare questi eventi.
Enjoy!
javascript node.js socket.io html
Commentami!