快速路线&套接字io

时间:2014-10-08 14:39:59

标签: node.js express websocket socket.io

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

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

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

1 个答案:

答案 0 :(得分:0)

这就是我配置它的方式:

我有一个处理socket 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,....)中,我可以使用只需要io库的notifyTransfer方法。

希望这有帮助