【问题标题】:how nodejs socket.on('data' works?nodejs socket.on('data' 是如何工作的?
【发布时间】:2018-05-02 01:56:59
【问题描述】:

nodejs socket.on('data'如何在数据末尾没有行尾的情况下工作?

我的意思是 nodejs 如何在没有任何分隔符的情况下分隔每个数据,例如 \n

这个问题是因为我在我的脚本中发现了一个小错误

错误是:

当发送数据非常快时,所有数据都将附加到一个并且socket.on('data'将只运行一次

例如

在客户端:

如果同时发送两个或模式数据(在同一个打开的连接上),如下所示:

client.write('1');
client.write('2');

在服务器上 socket.on('data' 会被调用一次,data 为 12

如果发送 json 数据会出错

【问题讨论】:

  • 这是预期的行为。您正在接收您发送的数据,并且分隔符不是其中的一部分。如果你愿意,你可以自己添加一个分隔符并在另一边解析它。或使用第 3 方软件为您管理。
  • tnx ,看解决办法

标签: json node.js sockets tcp


【解决方案1】:

我终于找到了解决办法

由于在 nodejs tcp sockets 中,每个块不包含前一个块 这个技巧会 100% 奏效!

服务器:

socket.on('data', function (data) {

    var newdata = ""+data;
    var newdatachunks = newdata.split("\n");

         for (var i = 0 ; i<(newdatachunks.length-1);i++) {
             console.log("real data is :"+newdatachunks[i]); 
         }

});

客户:

在客户端,每条消息必须以 \n(或您喜欢的任何分隔符)结尾

client.write("1\n");
client.write("2\n");
client.write("3\n");
client.write("4\n");

注意:如果您使用 json,请不要忘记使用 try/catch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多