【问题标题】:strings get concatenated on other end in TLS socket connection in node字符串在节点中的 TLS 套接字连接的另一端连接
【发布时间】:2015-06-25 23:13:40
【问题描述】:

我正在使用 tail-always 跟踪文件 并使用节点中的 TLS 套接字将数据传输到另一台服务器。这是将线路传输到另一台服务器的代码

var client = tls.connect(port,serveraddress, options, function() {
    tail.on('line', function(data) {
            console.log(data.toString('utf-8'))
            client.write(data.toString('utf-8'));
    });
    tail.on('error', function(data) {
        console.log("error:", data);
    });
    tail.watch();
});

另一端的服务器监听一个端口并获取文本。代码是:

var server = tls.createServer(options, function(tslsender) {
    tslsender.on('data', function(data) {
            console.log(data.toString('utf-8'));
    });
    tslsender.on('close', function() {
            console.log('closed connection');
    });
});

当一次向文件中添加一行时,该程序运行良好,但是当向文件中添加多行时,这些行在服务器端被连接起来。我已经确认它们在 之前没有被连接起来client.write 函数。
我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js sockets ssl buffer


    【解决方案1】:

    标准的stream 只是一堆字节。在流的一端一次写入一行不会影响该数据在另一端的接收方式。如果您希望您的服务器一次处理一行接收的数据,您需要在服务器上使用split 之类的东西来执行此操作。

    var split = require('split');
    
    var server = tls.createServer(options, function(tslsender) {
        let lineStream = tslsender.pipe(split());
        lineStream.on('data', function(data) {
            console.log(data.toString('utf-8'));
        });
    
        tslsender.on('close', function() {
            console.log('closed connection');
        });
    });
    

    【讨论】:

    • 简单拆分不起作用,所以在我的情况下,我必须在拆分中使用正则表达式进行行分隔
    猜你喜欢
    • 2017-02-04
    • 2021-07-06
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2016-01-27
    • 2011-09-20
    相关资源
    最近更新 更多