Итак, здесь есть некоторые недоразумения. Начнем с того, что такое «unix socket». Я думаю, вы думаете, что это просто файловый элемент, который действует как сервер самостоятельно через файловую систему OS /. Это не совсем правильно. Хотя он действительно связан через файловую систему, это не обычный файл. Вместо этого он похож на сокет TCP/IP, за исключением того, что вместо привязки IP и порта привязан путь к файлу.
Ключевым моментом является то, что это просто связанный сокет с другим типом адреса (и некоторые дополнительные возможности, но это вне сферы действия здесь). Таким образом, это означает, что что-то должно связывать сокет! В этом случае нам нужен сервер, как и мы, если бы мы обменивались «нормальным» портом. Если сервер не привязан к пути, вы получите ошибку, как и при подключении к порту без прослушивателя.
Чтобы создать сервер на сокет домена UNIX в узле, это довольно просто:
'use strict';
const net = require('net');
const unixSocketServer = net.createServer();
unixSocketServer.listen('/tmp/unixSocket',() => {
console.log('now listening');
});
unixSocketServer.on('connection', (s) => {
console.log('got connection!');
s.write('hello world');
s.end();
});
Обратите внимание, что есть еще одна разница между «нормальными» сокеты и сокеты домена UNIX: После того, как сервер выполняется с домен unix домена, он не будет автоматически уничтожен. Вместо этого вы должны указать unlink /tmp/unixSocket
, чтобы использовать его 'address'/path
Вы пытаетесь запустить * сервер * в Unix-сокете или * подключиться * к существующему сокету unix? Если последний, вы проверяли разрешения на '/ tmp/unixSocket'? Если первое, вы должны использовать 'net.createServer()' вместо этого. – mscdex
У меня возникли проблемы с этим, я могу сказать, что внутреннее состояние приложения C++ может быть изменено пользователем через nodeJs. должен ли этот NodeJ быть сервером или клиентом? – Hahn
Мой unix-сокет был объявлен ранее, я удалил его с помощью: ** fs.unlink (socketpath) **. – Hahn