我有几个客户端连接,其中一个应该在另一个中侦听数据。我如何在它们之间架起一座桥梁(不是数组迭代器)?
示例伪码:
socket.on('data', function(chunk){
decodeChunk(chunk.toString('hex'), function(response){
if(response.name === 'toDB'){
//write smth. to DB
}
if(response.name === 'readDB'){
//watch all incoming tcp sockets with 'toDB' and continiously
//send to client connected with this socket
}
});
})我可以使用类似于rabbitMQ的东西,但为了保持开发的更敏捷,它并不适用于当前阶段。
如有任何建议请见谅。
发布于 2015-07-30 08:00:38
最后得到了这样的服务:
var SocketMedium = {
sessions: {},
onEvent: function (event, cb) {
if (!this.sessions[event]) {
this.sessions[event] = [];
this.sessions[event].push(cb);
} else {
this.sessions[event].push(cb);
}
console.log('onEvent: ', event);
},
rTrigger: function (event, data) {
console.log('Started rTrigger: ', event);
if(this.sessions[event]){
console.log('FOUND: ', event);
this
.sessions[event]
.forEach(function (cb) {
cb(data);
})
}
console.log('Completed rTrigger', this.sessions);
},
cleaner: function(sessionId){
var event = 'session' + sessionId;
if (this.sessions[event]) {
delete this.sessions[event];
console.log('SocketMedium cleaned: ', this.sessions[event]);
}
console.log('SocketMedium can not find: ', this.sessions[event]);
}
};
module.exports = SocketMedium;发布于 2015-07-28 08:50:45
用纯伪代码来解决这个问题有点棘手,但无论如何我还是要尝试一下。
如果我正确理解了这一点,那么toDB和readDB就是示例数据,并且有多个toDB。这意味着,您也会有一堆toXY和相应的readXY,或者一堆toPQ和相应的readPQ。如果是这样的话,那么一旦连接到toSOMETHING,您就可以将该套接字存储在readSOMETHING下。如果键已经存在,那么只需将toSOMETHING套接字附加到其中。迟早它会是这样的:
var socketData = {
readDB: {
sockets: [
<socket-object-toDB-1>,
<socket-object-toDB-2>,
<socket-object-toDB-3>
]
},
readXY: {
sockets: [
<socket-object-toXY-1>,
<socket-object-toXY-2>,
<socket-object-toXY-3>
]
}
}然后你的伪代码可能看起来就像
socket.on('data', function(chunk){
decodeChunk(chunk.toString('hex'), function(response){
if(response.name === 'toDB'){
//write smth. to DB
if (socketData['readDB']) {
// already exists, simply append incoming socket to it's sockets array
socketData['readDB'].sockets.push(socket);
} else {
// does not exist, add it with a sockets array
socketData['readDB'] = {
sockets: [socket]
}
}
if(response.name === 'readDB'){
// Write to all sockets of readDB
socketData['readDB'].sockets.forEach(function(sock) {
sock.write('Whatever message\r\n');
});
}
});
})https://stackoverflow.com/questions/31670325
复制相似问题