我有很多設備將消息發送到寫入節點的TCP服務器。 TCP服務器的主要任務是將一些消息路由到redis以便被另一個應用程序處理。node.js使用TCP服務器傳輸和保存文件
我寫了一個簡單的服務器,很好地完成了這項工作。代碼的結構基本上是這樣(不是實際的代碼,細節隱藏):
const net = require("net");
net.createServer(socket => {
socket.on("data", buffer => {
const data = buffer.toString();
if (shouldRouteMessage(data)) {
redis.publish(data);
}
});
});
大多數消息是這樣的:{"text":"message body"}
,或{"lng":32.45,"lat":12.32}
。但有時我需要處理一個消息,如跨越幾個「數據」事件的消息,如{"audio":"...encoded audio..."}
。
在這種情況下,我需要將編碼後的音頻保存到文件中,併發送到redis {"audio":"path/to/audio-file.mp3"}
,其中路由是接收到音頻數據的文件。
一個簡單的選擇是存儲緩衝區,直到檢測到消息結束並將其全部保存到文件中,但這意味着,除了別的以外,我必須在保存到磁盤之前將文件保留在內存中。
我希望有更好的選擇,使用流和管道。有什麼建議麼? (一些代碼示例,將是很好的)
感謝