没有使用systemd套接字激活的数据

我有两个小systemd套接字和服务文件:

sockets:

[Socket] ListenStream=80 # also tried with Accept=no [Install] WantedBy=sockets.target 

服务:

 [Unit] Description=Test Webserver [Service] EnvironmentFile=/path/to/node-script.env ExecStart=/path/to/node /path/to/server.js Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=node-script Type=simple User=test-user Group=test-user [Install] WantedBy=sockets.target 

ENV:

 PORT=80 

我有一个小小的Node.js脚本:

 var http = require('http'); var server = http.createServer(); server.on('connection', function(conn) { // socket connection console.log('new connection', conn.address()); conn.on('data', function(data) { console.log('more data', data.length); }); }).on('request', function(req, res) { // a request! console.log('new request', req.headers); }).listen({fd: 3}, function() { console.log('listening on provided descriptor', server.address()); }); 

如果我启动它:

 $ systemctl start node-script.socket $ curl localhost 

卷毛就坐在那里。 同样的事情,如果我试图直接netcat的数据到套接字。 检查日志,我注意到服务器得到了连接,但从来没有得到任何数据或请求。

 listening on provided descriptor { address: '::', family: 'IPv6', port: 80 } new connection { address: '::1', family: 'IPv6', port: 80 } 

数据在哪里?

万一有其他人遇到这个问题:在systemd [Service]部分,你需要添加这一行:

 NonBlocking=True 

虽然这只适用于旧版本, 修复了node.js以在0.12系列中的某处设置非阻塞标志。