使用 node.js 重新组装 udp 消息

Posted

技术标签:

【中文标题】使用 node.js 重新组装 udp 消息【英文标题】:Reassemble udp messages with node.js 【发布时间】:2013-07-02 21:57:34 【问题描述】:

我刚刚开始使用 node.js 和 UDP。我正在尝试捕获 UDP 数据包,然后格式化输出。

我收到的 UDP 数据包被分成多条消息。我不知道如何重新组合消息。我可以连接每条消息,但我怎么知道消息是完整的?我需要处理该数据,但我需要完成消息。

仅供参考...这是用于记分牌类型的应用程序。统计数据正在通过 UDP 广播,我正在尝试创建一个监控统计数据的应用程序。

这是一些基本代码

var dgram = require("dgram");
var server = dgram.createSocket("udp4");
var fs = require('fs');
var STATS;

server.on("message", function (msg, rinfo) 
STATS = STATS + msg;
msg = msg + '<!>';
console.log(msg);
  );

// *****************************
// When the message is complete
// Process STATS 
// *****************************

server.on("listening", function () 
  var address = server.address();
  console.log("server listening " +
      address.address + ":" + address.port);
);

server.bind(10101);
// server listening 0.0.0.0:41234

【问题讨论】:

我知道这是一个非常古老的问题,但您找到解决方案了吗? 【参考方案1】:

您可以控制客户端吗?如果是这样,您可以简单地使用某种符号来标识消息的结尾,并且您的程序可以检测msg 是否以此结尾。

但是 UDP 套接字是易变的 - 不能保证任何消息都会真正到达。也不能保证您的数据报将按照您发送它们的顺序到达。纠正这些问题更复杂 - 如果您不需要实时要求,那么切换到 TCP 会容易得多。

当您从客户端发送数据时,TCP 会自动将数据拆分成块,因此您需要使用相同的消息结束系统,或者检测套接字何时关闭。

【讨论】:

我无法更改正在发送的数据。消息中是否有可能在控制台上显示时未显示信息?可以帮助将信息重新组合在一起的东西吗?

以上是关于使用 node.js 重新组装 udp 消息的主要内容,如果未能解决你的问题,请参考以下文章

Node.js TCP 传入消息拆分成包

Node.js笔记:UDP基础使用

Node.js笔记:UDP基础使用

从 socket.io 收到消息时从客户端播放音频 - node.js

node.js 和 express:如何等待 udp 响应

Node.js——HTTP概念进阶