Configuring Express 4.0 routes with socket.io

前端 未结 3 641
渐次进展
渐次进展 2021-01-31 22:33

I have created a new Express application. It generated app.js for me and I have then created the following index.js bringing in socket.io:

var app = require(\'./         


        
相关标签:
3条回答
  • 2021-01-31 22:52

    I think a better way to do it is to attach the Io server to response object In the first middleware .per the way express is designed the Io server will be available to your subsequent routes.

    Check this link

    0 讨论(0)
  • 2021-01-31 23:00

    SocketIO does not work with routes it works with sockets.

    That said you might want to use express-io instead as this specially made for this or if you are building a realtime web app then try using sailsjs which already has socketIO integrated to it.

    Do this to your main app.js

    app = require('express.io')()
    app.http().io()
    
    app.listen(7076)
    

    Then on your routes do something like:

    app.get('/', function(req, res) {
        // Do normal req and res here
        // Forward to realtime route
        req.io.route('hello')
    })
    
    // This realtime route will handle the realtime request
    app.io.route('hello', function(req) {
        req.io.broadcast('hello visitor');
    })
    

    See the express-io documentation here.

    Or you can do this if you really want to stick with express + socketio

    On your app.js

    server = http.createServer(app)
    io = require('socket.io').listen(server)
    require('.sockets')(io);
    

    Then create a file sockets.js

    module.exports = function(io) {
    
        io.sockets.on('connection', function (socket) {
            socket.on('captain', function(data) {
                console.log(data);
                socket.emit('Hello');
            });
        });
    };
    

    You can then call that to your routes/controllers.

    0 讨论(0)
  • 2021-01-31 23:09

    The route:

    const Router = require('express').Router
    
    const router = new Router();
    
    router.get('/my-route', (req, res, next) => {
        console.log(req.app.locals.io) //io object
        const io = req.app.locals.io
        io.emit('my event', { my: 'data' }) //emit to everyone
        res.send("OK")
    });
    
    module.exports = router
    

    The main file:

    const app = require('express')()
    const server = require('http').Server(app);
    const io = require('socket.io')(server)
    const myroute = require("./route") //route file dir
    
    app.use(myroute);
    
    server.listen(3000, () => {
        console.log('¡Usando el puerto 3000!');
    });
    
    app.locals.io = io
    
    0 讨论(0)
提交回复
热议问题