我有两个独立的节点脚本(它们用于处理实时数据源)我试图将它们合并为一个脚本。下面是一个完整的脚本另一个脚本是相同的,除了它使用不同的数据库&提供MAP.room2
的数据。产卵脚本。
我尝试将2个脚本合并在一起工作(只要它没有崩溃或任何东西)但是一旦一个客户端连接它请求来自两个数据库的所有数据,并且两个产生的脚本,而不仅仅是数据对于相关的房间。
有了谷歌,看起来socket.emit('MAP.room1', newObj)
使用的是房间而不是命名空间。我从示例中无法理解的是,我需要对我需要更改的部分io.sockets.on
进行更改,因此只有相关数据才会提供给相关客户端。客户端看起来像是发送emit "join"
请求正确的数据。
var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
fs = require('fs');
var cp = require('child_process');
var tail = cp.spawn('/var/www/html/test/test/room1-db.rb');
app.listen(8000);
function handler(req, res) {
fs.readFile('/var/www/html/test/updates/test.html', function (err, data) {
if (err) {
console.log(err);
res.writeHead(500);
return res.end('Error loading webpage');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
console.log();
//Read from mongodb//
var connection_string = '127.0.0.1:27017/room1-web';
var mongojs = require('mongojs');
var db = mongojs(connection_string, ['items']);
var ls = db.collection('items');
db.items.find({}, {'_id': 0, "data.time":0}).forEach(function(err, doc) {
if (err) throw err;
if (doc) { socket.emit('MAP.room1', doc); }
});
// Get updates from ruby script //
tail.stdout.on('data', function(chunk) {
var closer = chunk.toString()
var sampArray = closer.split('\n');
for (var i = 0; i < sampArray.length; i++) {
try {
var newObj = JSON.parse(sampArray[i]);
// DO SOCKET //
socket.emit('MAP.room1', newObj);
} catch (err) {
}}
});});
客户端网页连接以下内容; '+ t'在其他地方定义,在我的示例中,它将是room1和room2
function startDiagram(t, e) {
var n = io.connect(e);
n.on("connecting", function () {
n.emit("join", t), $("#room-map").fadeTo(0, 1)
}), n.on("MAP." + t, function (t) {
logMessage(t), updateMapElement(t)
})
}
任何人都可以指出我需要改变的正确方向,以使其发挥作用。
答案 0 :(得分:0)
因此,在了解了客户端的回调是如何工作的之后,我能够真正地合并脚本&amp;根据客户端发回的内容使用if
语句。
socket.on('join', function(mapname) {
\\ do socket stuff here\\ }
if (mapname == 'room1') {
\\the read correct room from db\\ }
if (mapname == 'room2') {
\\the read correct room from db\\ }
这是一个肮脏的黑客&amp;我需要完全重新理解套接字/节点如何工作以使某些事情变得更加实用,但这让我走了一步。