Comment utiliser Socket.io associé à Express.JS (à l’aide du générateur d’applications Express)

J’essaie d’utiliser Socket.io combiné à Express.JS (à l’aide du générateur d’applications Express).
J’ai trouvé quelques réponses à cette question ( Utilisation de socket.io dans Express 4 et de / bin / www de express-generator ).
Mon problème est que je ne peux pas utiliser les sockets à l’intérieur du dossier routes. Je peux les utiliser dans les fichiers app.js et bin / www.js. Lorsque j’appelle route index.js, il continue de charger la page Web pendant longtemps sans donner d’erreur.

bin / www.js

... /** * Create HTTP server. */ var server = http.createServer(app); var io = app.io io.attach( server ); ... 

app.js

 ... // Express var app = express(); // Socket.io var io = socket_io(); app.io = io; var routes = require('./routes/index')(io); ... 

routes / index.js

 module.exports = function(io) { var app = require('express'); var router = app.Router(); io.on('connection', function(socket) { console.log('User connected'); }); return router; } 

Voici un exemple simple d’utilisation de Socket.io avec Express que j’ai rendu disponible sur GitHub ici:

Le code de base est le suivant:

 var path = require('path'); var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', (req, res) => { console.error('express connection'); res.sendFile(path.join(__dirname, 'si.html')); }); io.on('connection', s => { console.error('socket.io connection'); for (var t = 0; t < 3; t++) setTimeout(() => s.emit('message', 'message from server'), 1000*t); }); http.listen(3002, () => console.error('listening on http://localhost:3002/')); console.error('socket.io example'); 

Voir https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js

Comme vous pouvez le voir ici, je crée l’application express avec:

 var app = require('express')(); 

Ensuite, je crée un serveur http avec cette application avec:

 var http = require('http').Server(app); 

Et enfin, j’utilise ce serveur http pour créer l’instance Socket.io:

 var io = require('socket.io')(http); 

Après avoir couru:

 http.listen(3002, () => console.error('listening on http://localhost:3002/')); 

tout fonctionne ensemble.

Vous pouvez voir l’exemple entier sur GitHub avec les codes backend et frontend qui fonctionnent. Il utilise actuellement Express 4.14.0 et socket.io 1.4.8.