Выходные данные запуска Socket.io убивают сценарий Upstart для демона node.js - PullRequest
3 голосов
/ 01 сентября 2011

У меня есть скрипт Node, который использует Socket.io для широковещательной рассылки сообщений подключенным клиентам.Я хочу запустить его как фоновый процесс с помощью сценария Upstart.Я могу запустить демон с sudo start my_server, и процесс запустится и запустится.Однако сервер немедленно останавливается стандартным выводом Socket.io 'info - (Socket.io запущен)'.

Это выполняется перед чтением конфигурации Socket.io.Socket.io документация показывает, что я могу передать опцию 'log' методу listen, чтобы sys.log не отправлял вывод в stdout.Но я не могу удержать эту первоначальную информацию (запущена Socket.io) от вывода.Я даже пытался закомментировать этот вызов logger в модуле, но он кешируется.

Кто-нибудь успешно создал демон узла / socket.io или подавил вывод по умолчанию для socket.io?Ниже приведен код для моего сценария Upstart и моего файла node.js.

upstart

description "node.js server"
author      "some@email.com"

start on started mountall
stop on shutdown

respawn
respawn limit 99 5

script
   export HOME="/username"

   exec sudo -u username sh -c "/usr/local/bin/node path/to/server.js >> /var/log/node.log 2?&1"
end script

server.js с использованием socket.io

var http = require('http'),
url = require('url'),
fs = require('fs'),

//create server and attach socket io
server = http.createServer(function(req, res){
        res.writeHead(200,{ 'Content-Type': 'text/html' }); 
        res.end('<h1>Hello Socket Lover!</h1>');
      }),
io = require('socket.io').listen(server, function(message){});

//configure socket.io logging so it is minimal
io.configure(function(){
io.set('log level', 1);
io.set('transports', [
    'websocket',
    'flashsocket',
    'htmlfile',
    'xhr-polling',
    'jsonp-polling'
    ]);
});

//instruct our server to listen to port 8080    
server.listen(8080);

io.sockets.on('connection', function (socket) {
   socket.emit('message', { eventType: "connected" });
});

Я ценю любыеответы или решение.

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

Это утверждение находится в /usr/local/lib/node_modules/socket.io/lib/manager.js в строке 117 для socket.io 0.7.9 (если вы не используете глобальную установку npm, тогдабыть там, где вы установили свои модули npm).Откройте файл, перейдите к строке 117 и закомментируйте его.Затем очистите кеш (npm cache clean $HOME/.npm/socket.io) и перезапустите, и его не должно быть.

1 голос
/ 01 сентября 2011

Я получил сообщение от tedah , автора Socket.io.Он ответил, что эта проблема заключалась в том, чтобы передать опции в manager.js через метод слушателя как таковой ...

options.logger = {
   info: self.emit.bind(self, 'info'),
   error: self.emit.bind(self, 'error'),
   warn: self.emit.bind(self, 'error'),
   debug: new Function()
 };

var io = socketIo.listen(port, options);

Где options.logger.info и т. Д. Связаны с методами (self) контейнера, а options.logger.debug игнорируется.

...