Express Route & Socket io

Posted

技术标签:

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

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

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

所以我的问题是,如果在 server.js 中启动 http 服务器而不调用新的 http 服务器实例,我如何在路由中使用套接字 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 库。

希望对你有帮助

【讨论】:

以上是关于Express Route & Socket io的主要内容,如果未能解决你的问题,请参考以下文章

express 中导入变量的问题,错误:Route.get() 需要回调函数

一根Express Route同时支持ARM和ASM的VNET

在 Express Route 中使用 Multer? (使用 MEANJS)

使用 Express Route 使用来自 Mongoose 的数据填充主干木偶视图

在 Express 中对路线进行分组

当多个路径匹配时,Express 如何知道使用哪个路由器路径?