Nano Hash - криптовалюты, майнинг, программирование

Node.js readline.on('line', fn()) не видит новые строки

Я пытался написать простой терминальный IRC-клиент, используя readline и net.

Отправка команд с использованием client.write() работает отлично, за исключением случаев, когда я делаю это в readline.on('line' (cb) => cbstuff), и я не знаю, почему.

У меня есть две идеи о возможной проблеме и понятия не имею, как исправить любую из них:

Мое первое предположение заключается в том, что мне нужно что-то изменить в rl.createInterface() для работы с клиентом вместо stin/stdout.

Мое второе подозрение заключается в том, что readline никогда не видит возврат каретки, потому что \n или \r\n где-то фильтруется/экранируется. С другой стороны, отправка \r\n непосредственно в client.write() работает, как и ожидалось, для многострочных сообщений.

Вот мой код:

const net = require('net');
const fs = require('fs');
const readline = require('readline');

const host = 'irc.freenode.net';
const port = 6666;
const client = new net.Socket();

rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

client.connect(port, host, () => {
    console.log(`CONNECTED TO: ${host}:${port}\n`);
    client.write('USER foo bar batz boo\r\nNICK nodetest123\r\n');
    client.write('JOIN #testchan123\r\n');

    rl.on('line', cmd => client.write(cmd));
    // rl.prompt(); doesn't help
});

client.on('data', data => {
    console.log(`DATA: ${data}`);
    fs.appendFile("log.txt", data, err => {
        if (err)
            return console.log(err);
    });
});

client.on('error', error => console.log(error));
client.on('close', () => console.log('Connection closed'));

Ответы:


1

Ваша ошибка, вероятно, в client.write(cmd), я думаю, что она должна быть client.write(cmd + '\r\n').

14.11.2019
  • Спасибо, это исправляет это, и теперь я чувствую себя невероятно глупо, я даже сказал, что подозревал, что возврат каретки не был отправлен, и по какой-то причине я никогда не думал об отправке его вручную и ожидал, что readline сделает это за меня. 14.11.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..