Socket.io et SSL
Petite note rapide sur l'utilisation de SSL avec Socket.io. Voici le code qui marche :
'use strict';
// Getting server, socket and redis
var fs = require('fs');
var app = require('express')();
var https = require('https');
var options = {
key: fs.readFileSync('/home/raphael/nodekeys/key.pem'),
cert: fs.readFileSync('/home/raphael/nodekeys/cert.pem'),
requestCert: true
};
var server = https.createServer(options, app);
var io = require('socket.io').listen(server);
var redis = require('socket.io-redis');
// Adapter SocketIO - Redis
io.adapter(redis({ host: '127.0.0.1', port: 6379 }));
// On socket connexion
io.on('connection', function(socket){
// Canal "modification"
socket.on('modification', function(msg){
// Emit
io.emit('modification', msg);
});
});
server.listen(8081);
La clef et le certificat doivent etre valables - pour ma part, c'est du Let's encrypt.
Coté client, ça donne ça :
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script>
$(document).ready(function() {
var socket = io('https://mondomaine.com:8081', {secure: true});
socket.on('modification', function (data) {
// Trucs à faire une fois le message reçu via le canal "modification"
});
});
</script>
Voili voilà, le truc pas rigolo, c'est quand on doit gérer plusieurs environnements (développement, prod, staging, etc.) Ça se règle avec des variables propres à chaque environnement...