3

我有一个 Node 脚本,它使用 Socket.io 向连接的客户端广播消息。我想使用 Upstart 脚本将它作为后台进程运行。我可以启动守护进程,sudo start my_server该进程将启动并运行。但是,Socket.io 的标准输出“info - (Socket.io started)”会立即停止服务器。

这是在读取 Socket.io 配置之前执行的。Socket.io文档显示我可以将“日志”选项传递给监听方法,以防止 sys.log 将输出发送到标准输出。但我似乎无法阻止输出最初的“信息-(Socket.io 已启动)”。我什至试图在模块中注释掉对记录器的调用,但它被缓存了。

是否有人成功创建了 node/socket.io 守护进程或抑制了 socket.io 的默认输出?下面是我的 Upstart 脚本和 node.js 的代码。

新贵脚本

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" });
});

我感谢任何答案或解决方案。

4

2 回答 2

4

该语句位于第 117 行的 /usr/local/lib/node_modules/socket.io/lib/manager.js for socket.io 0.7.9 中(如果您不使用全局 npm 安装,那么它将在任何地方你已经安装了你的 npm 模块)。打开文件,转到第 117 行并将其注释掉。然后清理缓存(npm cache clean $HOME/.npm/socket.io)并重新启动它应该消失了。

于 2011-08-31T22:19:16.297 回答
1

我收到了来自tedah的消息,他是 Socket.io 的贡献者。他对这个问题的回答是通过 listener 方法将选项传递给 manager.js……</p>

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.infoetc 绑定到容器的(自我)发射方法并被options.logger.debug忽略。

于 2011-09-01T13:54:55.930 回答