javascript - nodeJs 上的 unix 套接字

标签 javascript node.js unix-socket

快速和基本的 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/

相关文章:

javascript - 如何更改webpack中的请求路径

linux - 如何在 Linux 上查看和编辑临时端口范围?

python - 延迟中未处理的错误?将 UNIX 套接字与 Twisted 一起使用

javascript - 获取具有相同类的所有元素

javascript - 在android webview中注入(inject)javascript

javascript - 在下拉列表中的类别中拆分选项

node.js - dialogflow-fulfillment-library 和express,需要什么?

javascript - 左侧带有导航栏的 jquery ui 标签页

node.js - 将数据实时流式传输到 Big Query(使用 Node)的最佳方式是什么?

sockets - 通过文件描述符构造套接字对象