gpt4 book ai didi

asynchronous - Node.js TCP 客户端命令/响应

转载 作者:可可西里 更新时间:2023-11-01 02:55:02 25 4
gpt4 key购买 nike

我有一个简单的服务器,你向它发送一个命令,它用\r\n 分隔的响应回复。

所以我试图在我的客户端上获得一个命令(回调)方法。查看这个简化的代码片段:

var net = require('net');

var Client = function() {
this.data = "";
this.stream = net.createConnection(port, host);

this.stream.on('data', function( data ) {
var self = this;

this.data += data;
self.process()
};

this.process = function() {
var _terminator = /^([^\r\n]*\r\n)/;

while( results = _terminator.exec(this.data) ) {
var line = results[1];
this.data = this.data.slice(line.length);

this.emit('response', data);
};
};

this.sendCommand = function( command, callback ) {
var self = this;

var handler = function( data ) {
self.removeListener('response', handler);

callback && callback(data);
}

this.addListener('response', handler);

this.stream.write(command);
};

this.command_1 = function( callback ) {
this.sendCommand( 'test', callback );
};

this.command_2 = function( callback ) {
this.sendCommand( 'test2', callback );
};
}

所以我正在执行 client.command_1( function() {} ),然后执行 client.command_2( function() {}) 但在我的 command_2 的回调中,我收到了来自 command_1 的响应。

这是实现这种事情的正确方法吗?

最佳答案

当你执行

client.command_1( function() { 1; } );
client.command_2( function() { 2; } );

您添加两个回调作为“结果”监听器,当emit('result') 第一次发生时,两个回调都被调用(然后第一个回调删除本身从列表中)。您需要在某种请求对象上设置回调,而不是在客户端上。

关于您的客户端中发生的事情的简单代码:

var e = new EventEmitter();
e.on('result', function() { console.log(1); });
e.on('result', function() { console.log(2); });
// ...
e.emit('result'); // here we trigger both callbacks which result in printing "1\n2\n"

关于asynchronous - Node.js TCP 客户端命令/响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718834/

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