Я новичок в Node.js, и я пытаюсь учиться, создавая сервер, который слушает сокет Unix -домена. Я тестирую свой сервер, используя 'n c' в качестве клиента. 'n c -U /var/run/ipc.sock' Все идет хорошо, за исключением того, что все, что я ввожу в n c, возвращается обратно.
Как это (Текст заглавными буквами является ответом от сервера. Смешанный регистр набирается в n c):
$ nc -U /var/run/ipc.sock
READY
Hello.
Hello.
OK
Echo.
Echo.
OK
Я не могу понять, является ли это повторение всего, что я ввожу, какой-то настройкой, которую я пропустил в своем коде сервера, или если это настройка для n c. Я просматривал страницы net .createServer на nodejs .org и страницу руководства по n c на моем сервере FreeBSD. Не повезло.
Это код моего сервера:
'use strict';
const fs = require('fs');
const net = require('net');
const socket = '/var/run/ipc.sock';
// ISO date-time stamp and a separator for logging.
function stamp(msg) {
var d = new Date();
return d.toISOString() + ' ' + msg;
}
// Create a Unix-domain IPC server to receive and execute commands.
const server = net.createServer((c) => {
console.log(stamp('Client connect.'));
c.write('READY\n');
c.pipe(c);
c.on('data', (d) => {
if (d.slice(-1) == '\n') d = d.slice(0, -1); // like Perl chomp()
console.log(stamp('Data received: ' + d.toString()));
c.write('OK\n');
});
c.on('end', () => {
console.log(stamp('Client disconnect.'));
});
});
// Start listening on a socket restricted to user:group.
server.listen(socket, () => {
fs.chmod(socket, 0o660, (e) => {
if (e) throw e;
});
console.log(stamp('Server listening.'));
});
// Error handler (specifically for stale socket due to unclean shutdown.)
server.on('error', (e) => {
if (e.code == 'EADDRINUSE')
console.error('Stale socket detected. Remove ' + e.address + ' and try again.'
);
else throw e;
});
// Catch SIGINT and SIGTERM in order to exit cleanly.
function sigHandler(s) {
if (s == 'SIGINT' || s == 'SIGTERM') {
console.log(stamp('Caught signal: ' + s + '.'));
process.exit(0);
}
}
process.on('SIGINT', sigHandler);
process.on('SIGTERM', sigHandler);
// Clean up socket on exit.
process.on('exit', (c) => {
console.log(stamp('Shutdown.'));
fs.unlink(socket, (e) => {
console.error(stamp('Unable to remove socket ' + socket));
});
});
Любая помощь будет оценена. Я использую FreeBSD 12.1, это важно.