Node.js: как очистить сокет? - PullRequest
6 голосов
/ 22 января 2012

Я пытаюсь очистить сокет перед отправкой следующего фрагмента данных:

var net = require('net');

net.createServer(function(socket) {
    socket.on('data', function(data) {
        console.log(data.toString());
    });
}).listen(54358, '127.0.0.1');

var socket = net.createConnection(54358, '127.0.0.1');

socket.setNoDelay(true);
socket.write('mentos');
socket.write('cola');

Это, однако, не работает, несмотря на параметр setNoDelay, например печатает "mentoscola" вместо "mentos \ ncola". Как мне это исправить?

Ответы [ 2 ]

6 голосов
/ 22 января 2012

Если посмотреть на WriteableStream API и связанный с ним пример , кажется, что вы должны установить свои разрывы или разделители самостоятельно.

exports.puts = function (d) {
  process.stdout.write(d + '\n');
};

Поскольку ваш сокет является потоком, данные будут записываться / считываться без вашего прямого контроля, и #write не изменит ваши данные и не будет предполагать, что вы намерены прерывать запись, поскольку вы можете передавать большой кусок информации через сокет и может потребоваться установить другие разделители.

Я определенно не эксперт в этой области, но мне кажется, что это логичный ответ.

Редактировать : Это дубликат Потоковое Nodejs , и вывод был таким же, как и в ответе, который я указал: работа с потоками не построчна, установить свои собственные разделители.

0 голосов
/ 15 мая 2012

Возможно, все данные, записанные в одном тике, отправляются в виде пакета.

Возможно, на принимающей стороне узел объединит отдельные сегменты данных перед отправкой события данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...