从socket.io中删除心跳调试消息

时间:2013-11-17 20:44:09

标签: socket.io

在编写使用socket.io的应用程序时,我发现心跳调试消息淹没了我想看到的调试消息。关闭心跳的调试消息的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

从socket.io

中删除心跳调试消息

使用动态环境配置设置socket.io,对于开发环境,请关闭“心跳间隔”

以下是一些提示,其中大部分来自socketIO v09 wiki的Configuring-Socket.IO页面。

var io = require('socket.io').listen(80);

// This is sugar for if process.env.NODE_ENV==='production'
io.configure('production', function(){

  // send minified client
  io.enable('browser client minification');  
  // apply etag caching logic based on version number
  io.enable('browser client etag');          
  io.enable('browser client gzip');  // gzip the file
  io.set('log level', 1);           // reduce logging

  // enable all transports 
  // (optional if you want flashsocket support, 
  // please note that some hosting
  // providers do not allow you to create servers that listen on a 
  // port different than 80 or their
  // default port)

  io.set('transports', [
      'websocket'
    , 'flashsocket'
    , 'htmlfile'
    , 'xhr-polling'
    , 'jsonp-polling'
  ]);
}); 

io.configure('development', function(){
  io.set('heartbeats', false); //removes heartbeats
  io.set('log level', 1);      // reduces all socket.io logging, including heartbeats.
});

这样做,然后你对生产中的心跳(默认)很好,当你在它的时候 - 你得到了基本的建议生产设置。

此外,根据框架,或者在express / socket.io / top-level-app制作方式的确切位置,您可能会有类似的设置。

app.io.enable('browser client minification');

app.configure(function() {
  app.enable('junny')
  app.set('foo', 'bar')
});

因此,要控制心跳,首先要确保您的快速/ api日志记录得到充分利用,因此请加载您的应用:

$  DEBUG=* node ./app.js

然后检测您是否处于开发环境中(最顶级的方式):

if (process.env.NODE_ENV === 'development') {
  io.set('heartbeat interval', 60*750);
}

// 60*750 = 45000ms = 45 seconds.

这会将心跳间隔变为45秒。

可以在socket.io configuration wiki page找到所有选项,这是与此问题最相关的块引用:

  

心跳超时默认为60秒

     

客户端的超时,我们应该从中获得心跳   此间隔内的服务器。这应该大于心跳   间隔。成功后,此值将发送到客户端   握手。

     

心跳间隔默认为25秒

     

服务器发送新心跳时的超时时间   客户端。

如果您希望心跳/消息仍然向上调整这些时间,则必须在您自己的系统上进行测试,但请遵循一般准则/比率,然后从那里进行调整/测试。