2012-02-16 136 views
4

我的socket.io版本是[email protected][email protected]。 我在Windows上。socket.io redis和內存泄漏

在某些地方,我看到問題已解決。我想我正在使用最新的socket.io版本。 什麼是emitter.setMaxListeners(),我可以在哪裏設置它?

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. 
Use emitter.setMaxListeners() to increase limit. 
Trace: 
    at RedisClient.<anonymous> (events.js:133:17) 
    at Socket.<anonymous> (c:\HTML5\LIKEPREF\test\server\server.js:576:18) 
    at Socket.$emit (events.js:67:17) 
    at SocketNamespace.handlePacket (C:\Personal\software\nodejs\NODE\node_modul 
es\socket.io\lib\namespace.js:335:22) 
    at Manager.onClientMessage (C:\Personal\software\nodejs\NODE\node_modules\so 
cket.io\lib\manager.js:459:38) 
    at WebSocket.onMessage (C:\Personal\software\nodejs\NODE\node_modules\socket 
.io\lib\transport.js:387:20) 
    at Parser.<anonymous> (C:\Personal\software\nodejs\NODE\node_modules\socket. 
io\lib\transports\websocket\hybi-16.js:40:10) 
    at Parser.emit (events.js:67:17) 
    at C:\Personal\software\nodejs\NODE\node_modules\socket.io\lib\transports\we 
bsocket\hybi-16.js:286:16 
    at Parser.expectHandler (C:\Personal\software\nodejs\NODE\node_modules\socke 
t.io\lib\transports\websocket\hybi-16.js:297:15) 

我使用的是redis pubsub,當我訂閱redis時,在這一點上拋出了這個警告。

回答

8

存在與此相關的已知問題。看起來好像是幾個月前的補丁。最簡單的解決方法是將最大聽衆設置爲0,這將刪除實際的限制。因此,這將是這個樣子:

this.sub = redis.createClient(opts.redisSub.port, opts.redisSub.host, opts.redisSub); 
this.sub.setMaxListeners(0); 

你可以找到完整的討論在這裏:https://github.com/LearnBoost/socket.io/issues/520

+0

邁克感謝。根據討論,它應該是this.sub.maxListeners(0),而不是this.sub.setMaxListeners(0);無論如何,讓我嘗試並更新你。 – user644745 2012-02-16 07:39:05

+0

邁克,剛剛測試過。它應該是setMaxListeners(0)而不是maxListeners(0)。似乎工作正常。謝謝。 – user644745 2012-02-16 07:44:17