好的,所以我让我的套接字io连接将信息发送到前端,客户端也能够响应,从而保存返回的数据。
然而,当套接字io仅在'/user/home'
路由中使用时,在server.js
文件中启动套接字io是没有意义的。
所以我的问题是,如果http服务器是在server.js
中启动的,而不调用http服务器的新实例,我如何在路由中使用socket-io?
这就是我配置它的方式:
我有一个io.js库,可以处理套接字io的东西:
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库。
希望这能帮助