用純粹的僞代碼解決這個問題有點棘手,但無論如何我都會給它一個鏡頭。
如果我理解正確,那麼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');
});
}
});
})
可以共享有關你的代碼的一部分? – Peanut
對不起,無法共享完整的代碼,這就是爲什麼發佈一些僞代碼。希望它能澄清事情。 – glebcha