【问题标题】:Express Route & Socket ioExpress Route & Socket io
【发布时间】:2014-10-08 14:39:58
【问题描述】:

好的,所以我让我的套接字 io 连接向前端发送信息,客户端也能够响应,从而保存返回的数据。

但是,当套接字 io 仅在 '/user/home' 路由中使用时,在 server.js 文件中启动套接字 io 是没有意义的。

所以我的问题是,如果在 server.js 中启动 http 服务器而不调用新的 http 服务器实例,我如何在路由中使用套接字 io?

【问题讨论】:

    标签: node.js express websocket socket.io


    【解决方案1】:

    这是我的配置方式:

    我有一个处理套接字 io 东西的 io.js 库:

    var io = require('socket.io')();
    var redis = require("redis");
    var client = redis.createClient();
    io.path('/socket');
    client.on('connect', function () {
        console.log("Redis successfully connected");
    });
    io.on('connection', function (socket) {
      console.log('a user connected: '+ socket.handshake.query.uid_bsp);
        console.log('socket id: '+socket.id);
      //clients.uid_bsp=socket.id;
      //console.log('a user added: ');  
      client.set(socket.handshake.query.uid_bsp,socket.id);
    });
    
    io.notifyTransfer = function (uid_bsp,data){
        client.get(uid_bsp,function(err,socketid){
                console.log('notifying: '+socketid);
                io.to(socketid).emit('update', data);
        });
    };
    
    
    
    module.exports = io;
    

    在 server.js 中,我需要这个库,并附加到服务器:

    var httpserver = http.createServer(app);
    var io = require('./src/utils/io.js');
    ...
    var server = httpserver.listen(app.get('port'), function(){
          console.log('Express server listening on port ' + app.get('port'));
        });
    
    io.attach(server);
    

    所以在我的路由中(它们是单独的 js 文件,例如 rest、front、....),我可以使用 notifyTransfer 方法,只需要 io 库。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 2021-03-17
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      相关资源
      最近更新 更多