gpt4 book ai didi

node.js - 当向 Node.js tcp 套接字发送多条消息时,它们会作为一条消息流式传输

转载 作者:IT老高 更新时间:2023-10-28 23:03:57 32 4
gpt4 key购买 nike

举一个简单的例子,我想向一个 node.js tcp 套接字发送多条消息。我只想在第一条消息完全发送/耗尽时发送第二条消息。但是,即使在等待调用 write 回调时,这些消息似乎也是作为一条消息发送的。

这里是一些示例代码:

var net = require('net');

var server = net.createServer();

server.on('connection', function(socket){
socket.write('First Message', function(){
socket.write('Second Message')
})
})

var client = new net.Socket();
client.setEncoding('utf8');

server.listen(9999, function(){
client.connect(9999);
});

client.on('data', function(data){
console.log('data received on socket:\n' + data);
});

根据 socket.write 的 node.js 文档,“可选的回调参数将在数据最终写出时执行 - 这可能不会立即执行。”

基于此,在我的代码中,仅当最终为第一条消息写出数据时才应发送第二条消息。

但是书面输出是:

data received on socket:

First MessageSecond Message

我怎样才能让它分别发送这些消息?

最佳答案

您需要为您的消息定义一种格式,以便您的客户端可以确定套接字流中消息的开头和结尾。例如,您可以在示例中使用回车来标记消息的结尾。

然后您可以使用拆分流在客户端中分别读取消息。

var net = require('net');
var split = require('split');
var server = net.createServer();

server.on('connection', function(socket){
socket.write('First Message\n', function(){
socket.write('Second Message\n')
})
})

var client = new net.Socket();
client.setEncoding('utf8');

server.listen(9999, function(){
client.connect(9999);
});

var stream = client.pipe(split());
stream.on('data',function(data){
console.log(data);
});

关于node.js - 当向 Node.js tcp 套接字发送多条消息时,它们会作为一条消息流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113273/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com