我有两个小的systemd套接字和服务文件:
插座:
[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
信封:
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系列中的某个位置设置非阻塞标志本身。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句