unix套接字上的NodeJS
快速和基本问题的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套接字”真的是开始。我想你在想它只是就像通过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
为了重复使用“地址” /路径