Tag: unix socket

在Node.js中打开多个UNIX域套接字:为什么我得到EAGAIN错误?

我的用例(webservice): 多个客户端=> Webserver =>通过UNIX域套接字向C程序发送消息。 我一直在使用Apache + PHP的Web服务器层,但我目前正在用Node.jsreplace它的过程。 web服务最多可以达到100个请求/秒,所以当一个新的请求进来时,C程序会很忙,这是一个非常真实的情况.PHP处理得很好,但是Node.js通常会失败, { "code": "EAGAIN", "errno": "EAGAIN", "syscall": "connect", "address": "/tmp/service.sock" } 我假设这是因为PHP执行某种消息队列/重试,将确保所有消息发送到C程序(哪个Node.js不)。 有没有一种简单的方法来做同样的Node.js或将不得不实现一个自定义的消息队列? C套接字创build: int listenSocket, newSocket; struct sockaddr_un localAddress, remoteAddress; // Create socket if ((listenSocket = socket(AF_UNIX, SOCK_STREAM, 0)) == -1){ printf("Error opening listener socket"); exit(1); } // Configure socket localAddress.sun_family = AF_UNIX; // Set UNIX domain […]

LXD – 如何通过nodejs下的unix套接字域连接到LXD API?

如何通过nodejs下的unix套接字域连接到LXD API? 我尝试下面的代码,但失败。 我有这个答案: HTTP / 1.1 400错误的请求 var net = require('net'); var lxdUSD='/var/lib/lxd/unix.socket'; var net = require('net'); var client = net.connect({path: lxdUSD}, function() { //'connect' listener console.log('connected to socket!: '+lxdUSD); }); client.on('data', function(data) { console.log(data); console.log(data.toString()); client.end(); }); client.on('end', function() { console.log('disconnected from socket!: '+lxdUSD); }); client.on('error', function() { console.log('Error'); process.exit(-1); }); setInterval(function(){ var […]

进程之间的通信:tcp vs unix套接字,ipc vs nats

我打破了一个大的应用程序到几个进程,我希望每个进程相互沟通。 现在它将在同一台服务器上,但后来在同一个本地networking上的几台服务器将有几个进程需要互相通信。 (指一台服务器上的服务,在同一个vpc上的服务在其他服务器上) 所以..我的原始选项是tcp或unix sockets 。 我知道,使用Unix套接字只有在同一台服务器上才有用。 但是我们正在考虑编写自己的实现,在相同的服务器进程上将在unix套接字上进行通信,并在使用tcp进行通信的服务器之间进行通信。 这值得么 ? 当然,TCP套接字是慢的,然后unix套接字..因为它不通过networking,并没有得到封装与TCP相关的数据。 问题是多less? 我无法findtcp和unix套接字之间的基准testing的在线certificate。 如果tcp增加了3%-5%的开销,那很酷,但可以更多吗? 我想多年来从别人的大项目经验中学习,但没有find任何相关的东西。 下一个… 我们的项目是一个NodejS项目。 有些人可能会说,我可以使用经纪人的消息,所以我尝试使用nats.io相比node-ipc( https://www.npmjs.com/package/node-ipc ),我发现了node-ipc速度提高了4倍,但是nats有很酷的发布 – 订阅function…但是性能很重要。 所以我有很多的select,没有具体的决定。 任何有关这个问题的信息将不胜感激。

如何连接到nodejs中的抽象名称空间unix家庭地址?

有没有人试图连接到nodejs中的unix系列地址的抽象名称空间path(它以空字符开头)? 问题似乎是节点在内部将path的编码设置为ascii,并因此将'\ 0'转换为空格字符。 我试过缓冲区,但没有改变任何东西。 如果您想知道unix地址族中的“抽象名称空间”,请参阅本链接的“地址格式”一节中标题为“abstract:”的段落: http : //man7.org/linux/man-pages/man7/unix。 7.html

通过UNIX套接字连接Node.JS和PHP – EPIPE写入错误

我试图创build一个PHP和Node.JS创build的应用程序之间的桥梁。 Node.JS创build套接字并听取它,我的代码: var net = require('net'), fs = require('fs'); var path = '/tmp/echo.sock'; fs.unlink(path, function () { var server = net.createServer(function(c) { console.log('server connected'); c.on('close', function() { console.log('server disconnected'); }); c.write('hello\r\n'); c.on('data', function(data) { console.log('Response: "' + data + '"'); c.write('You said "' + data + '"'); }); }); server.listen(path, function(e) { console.log('server bound on […]

nodeJs上的unix套接字

快速和基本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吗? 我错过了什么?

我想使用nodejs使CLI程序asynchronous

具体而言,我想让nodejs进程在可以产生subprocess的背景下运行(在这种情况下,用mplayer播放音乐文件),然后我想从不连续运行的单独程序来控制它。 所以如果我运行如下的东西: $ my_music_player pause song 我希望my_music_player脚本向后台进程发送一条消息,指示它将“p”写入mplayersubprocess的标准input,然后my_music_player脚本退出,但是mplayer和nodejs进程仍在后台运行,以便稍后取消暂停或调整音量等等。 我知道我可以使用nodejs child_process在后台进程和mplayer之间进行通信,我可以永远使用后台进程,但是我看不到任何更好的方法来与后台进程交谈,然后打开一个看起来像一吨不必要的开销..有没有人有更好的build议? 我没有结婚在这里使用nodejs。 我只需要一种方法来发送消息和从后台进程。

Sequelize通过Unix套接字连接到Postgres

我想通过Unix套接字(不通过localhost )使用Sequelize连接到Postgres。 Postgres被configuration为接受来自用户pgdba Unix套接字连接。 所有从psql命令行工作。 所以Pg端正确configuration。 我似乎无法findSequelizeconfiguration,虽然支持Unix套接字。 最近我能find的是mysql,我已经适应了Pg,但似乎没有工作: var sequelizeConfig = { dialect: 'postgres', dialectOptions: { socketPath: '/home/pgdba/data/5432/.s.PGSQL.5432', } port: 5432 }; var sequelize = new Sequelize('fooDb', 'pgdba', 'passwd', sequelizeConfig); 我在启动应用时遇到的错误: Unable to connect to the database: +23ms { [SequelizeConnectionError: pg_hba.conf rejects connection for host "127.0.0.1", user "pgdba", database "fooDb"] name: 'SequelizeConnectionError', message: 'pg_hba.conf rejects […]

使用Node.js实时读取文件

我需要制定出最好的方法来实时读取正在写入文件的数据,使用node.js。 麻烦的是,Node是一个快速移动的船只,它使寻找解决困难问题的最佳方法成为可能。 我想做的事 我有一个java进程正在做一些事情,然后把这个东西的结果写到一个文本文件中。 它通常需要5分钟到5小时的任何时间运行,数据一直写入,并且可以达到一些相当高的吞吐速率(大约1000行/秒)。 我想实时读取这个文件,然后使用节点聚合数据,并将其写入一个套接字,在套接字上可以绘制在客户端上。 客户端,图表,套接字和聚集逻辑都已经完成,但是我对读取文件的最佳方法感到困惑。 我所尝试过的(或至less玩过) FIFO – 我可以告诉我的Java进程写入一个fifo,并使用节点读取,实际上我们是如何使用Perl来实现这个function的,但是因为一切都在节点上运行,所以移植代码是有意义的。 Unix Sockets – 如上所述。 fs.watchFile – 这将工作,我们需要什么? fs.createReadStream – 这比fs.createReadStream更好吗? fs & tail -f – 看起来像一个黑客。 其实是我的问题 我倾向于使用Unix套接字,这似乎是最快的select。 但节点有更好的内置function实时读取文件从FS?

正常closures在Forever下运行的NodeJS上的UNIX套接字服务器

我有一个NodeJS应用程序,它设置了一个UNIX套接字来公开一些进程间通信通道(某种监视的东西)。 UNIX套接字文件放在os.tmpdir()文件夹(即/tmp/app-monitor.sock )中。 var net = require('net'); var server = net.createServer(…); server.listen('/tmp/app-monitor.sock', …); 我使用信号处理(SIGINT,SITERM等…)正常closures我的服务器并删除套接字文件。 function shutdown() { server.close(); // socket file is automatically removed here process.exit(); } process.on('SIGINT', shutdown); // and so on 我的应用程序正在forever start …运行forever start …监视它的生命周期。 我有一个与forever restartall命令的问题。 当永远restartall它使用SIGKILL来终止所有subprocess。 SIGKILL不能被进程处理,所以我的应用程序没有任何关机程序而死亡。 问题是使用SIGKILL时不会删除的套接字文件。 在subprocess重新启动后,新的服务器不能启动,因为“一个listen调用将导致EADDRINUSE错误。 我不能在应用程序启动过程中删除现有的套接字文件,因为我不知道它是否是一个真正的工作套接字或以前的不干净closures的痕迹。 所以,问题是…有什么更好的方式来处理这种情况(SIGKILL和UNIX-socket服务器)?