2017-06-30 1 views
0

私はループバックAPIを使用しています。 server.js(サーバが - > server.js)は以下の通りである:私は1つのモデルファイルにmock.js作成したループバックAPI socket.ioで接続されたソケット(クライアント)にのみデータを送信する方法

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 - >モデル)円グラフデータを定期的に送信します。

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は、接続されているすべてのクライアントにデータを送信しています。私はちょうど接続されたクライアントにデータを送信したい。すべてではない。私が行う場合socket.emitserver.js内部接続機能し、それは正常に動作します。しかし、モデル内部のメソッドからデータを出力したい(mock.js - >Mock.getPieChartData)。私はこのメソッドの中で現在のソケットインスタンスを取得していません。

答えて

0

いくつかの調査の後、上記の質問への回答が見つかりました。 server.jsでは、現在のソケットIDの変数を設定し、それをエクスポートします。mock.jsインサイド

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'); 
    }); 
}) 

を、現在のソケットオブジェクトを取得し、そのを使用して発光するように、この現在のソケット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()) 
}; 
関連する問題