快速和基本的 nodeJs 问题, 我正在使用 unix 套接字在 C++ 应用程序和我的 NodeJs 服务器之间进行服务器间通信,
我的 nodeJs 服务器是这样写的:
var net = require('net');
var unixSocketServer = net.createConnection('/tmp/unixSocket');
unixSocketServer.on('connect',function(){
console.log('unix server socket connected on /tmp/unixSocket');
...
});
但是我收到连接拒绝错误。 我可以理解 C++ 应用程序尚未打开/连接到套接字。 我的问题是 为什么这有关系? nodeJs 服务器不应该等到“连接”事件发出吗? 我目前正在使用 nodeJs 吗?我错过了什么吗?
最佳答案
好吧,所以这里有一些误解。让我们从真正的“unix 套接字”开始。我认为您认为它只是一个类似文件的项目,通过操作系统/文件系统独立地充当服务器。这不太正确。虽然它确实是通过文件系统绑定(bind)的,但它并不是真正的传统文件。相反,它就像一个 TCP/IP 套接字,只是绑定(bind)的不是 IP 和端口,而是文件路径。
这里的关键点在于它只是一个具有不同类型地址的绑定(bind)套接字(以及一些额外的功能,但不在本文讨论范围之内)。所以这意味着必须有东西绑定(bind)套接字!在这种情况下,我们需要一个服务器,就像我们通过“正常”端口进行通信一样。如果没有绑定(bind)到路径的服务器,则会出现错误,就像连接到没有监听器的端口时一样。
要在 Node 中的 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
才能重用该“地址”/路径
关于javascript - nodeJs 上的 unix 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783579/