[英]how to emit data only to connected socket(client) in loopback API socket.io
I am using loopback API. 我正在使用回送API。 server.js (server -> server.js) is as below: server.js(服务器-> server.js)如下:
var loopback = require('loopback');
var boot = require('loopback-boot');
var app = module.exports = loopback();
app.start = function () {
return app.listen(function () {
app.emit('started');
console.log('Web server listening at: %s', app.get('url'));
});
};
boot(app, __dirname, function (err) {
if (err) throw err;
if (require.main === module) {
//app.start();
app.io = require('socket.io')(app.start());
app.io.on('connection', function (socket) {
console.log('a user connected');
socket.on('disconnect', function () {
console.log('user disconnected');
});
})
}
});
I have created one model file mock.js (common -> models -> mock.js) which contains one method which send pie chart data periodically. 我创建了一个模型文件mock.js(常用->模型->嘲笑.js) ,其中包含一种定期发送饼图数据的方法。
module.exports = function (Mock) {
Mock.getPieChartData = function (cb) {
var appIO = Mock.app.io
console.log('Inside Mock->getPieChartData')
var interval = setInterval(function () {
appIO.emit("pieData", getPieChartData());
}, 3000)
cb(null, getPieChartData())
}
function getPieChartData() {
.......
}
}
Problem is, appIO.emit
sends data to all connected clients. 问题是, appIO.emit
将数据发送到所有连接的客户端。 I just want to send data to only connected client. 我只想将数据发送到仅已连接的客户端。 not all. 不是全部。 If I do socket.emit
in server.js inside connection function then it works fine. 如果我在连接功能内的server.js中执行socket.emit
,那么它将正常工作。 But I want to emit data from method inside model ( mock.js -> Mock.getPieChartData
). 但是我想从模型内部的方法中发出数据( 嘲笑.js- > Mock.getPieChartData
)。 I am not getting current socket instance inside this method. 我没有在此方法内获取当前的套接字实例。
After some research, found an answer to my question above. 经过研究,在上面找到了我的问题的答案。 In server.js, set a variable for current socket Id and export it: 在server.js中,为当前套接字ID设置一个变量,然后将其导出:
app.io.on('connection', function (socket) {
console.log('socket.io - a user connected');
module.exports = { currentSocketId: socket.id };
socket.on('disconnect', function () {
console.log('socket.io - user disconnected');
});
})
Inside mock.js, use this current socket Id to get current socket object and then emit using that. 在mock.js中,使用此当前套接字ID获取当前套接字对象,然后使用该对象进行发射。
Mock.getPieChartData = function (cb) {
var sourceFile = require('../pubsub/pubsub.js');
var appIO = Mock.app.io
console.log('Inside Mock->getPieChartData')
var currentsocket = appIO.sockets.clients().sockets[sourceFile.currentSocketId]
var interval = setInterval(function () {
currentsocket.emit("pieChartData", getPieChartData()) // this emit data to connected socket
//appIO.emit("pieChartData", getPieChartData()) // this emit data to all connected sockets(clients)
}, 3000)
cb(null, getPieChartData())
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.