繁体   English   中英

nodeJs上的unix套接字

[英]unix sockets on nodeJs

快速和基本的nodeJs问题,我正在使用unix socket进行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服务器不应该等到'connect'事件发出? 我目前使用nodeJs吗? 我错过了什么吗?

好的,所以这里有一些误解。 让我们从'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以重用该“地址”/路径

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM