[英]how to emit data only to connected socket(client) in loopback API socket.io
我正在使用回送API。 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');
});
})
}
});
我創建了一個模型文件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() {
.......
}
}
問題是, appIO.emit
將數據發送到所有連接的客戶端。 我只想將數據發送到僅已連接的客戶端。 不是全部。 如果我在連接功能內的server.js中執行socket.emit
,那么它將正常工作。 但是我想從模型內部的方法中發出數據( 嘲笑.js- > Mock.getPieChartData
)。 我沒有在此方法內獲取當前的套接字實例。
經過研究,在上面找到了我的問題的答案。 在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');
});
})
在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.