【发布时间】:2017-09-04 00:35:10
【问题描述】:
我有很多设备将消息发送到用节点编写的 TCP 服务器。 TCP 服务器的主要任务是将其中一些消息路由到 redis,以便由另一个应用程序处理。
我编写了一个简单的服务器,可以很好地完成这项工作。代码的结构基本是这样的(不是实际代码,细节隐藏):
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"},其中路由是接收到音频数据的文件。
一个简单的选择是存储缓冲区,直到我检测到消息的结尾,然后将它们全部保存到一个文件中,但这意味着,除其他外,我必须在保存到磁盘之前将文件保存在内存中。
我希望使用流和管道有更好的选择。有什么建议么? (一些代码示例,会很好)
谢谢
【问题讨论】:
标签: javascript node.js sockets tcp