我有很多设备将消息发送到写入节点的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"}
,其中路由是接收到音频数据的文件。
一个简单的选择是存储缓冲区,直到检测到消息结束并将其全部保存到文件中,但这意味着,除了别的以外,我必须在保存到磁盘之前将文件保留在内存中。
我希望有更好的选择,使用流和管道。有什么建议么? (一些代码示例,将是很好的)
感谢