2012-07-08 64 views
1

如果有標準socket.io設置:在使用socket.io的node.js中,如何動態添加到套接字偵聽器?

var app = require('http').createServer().listen(80,'127.0.5.12'), 
io = require('socket.io').listen(app); 

session = require('./local_modules/session.js'); 

// creating a new websocket to keep the content updated without any AJAX request 
io.sockets.on('connection', function(socket) { 

    // session, login, logout 
    socket.on('session', session.session.bind(socket)); 
    socket.on('login', session.login.bind(socket)); 
    socket.on('logout', session.logout.bind(socket)); 

    // what to add new listener here! 
}); 

在以後的程序,一旦它知道它想做的事,它希望新的功能添加到插座聽衆。例如,在'會話'中間可能希望添加'新東西':

exports.session = function(sid) { 
    var socket = this; 
    ... 
    // everything cool, now want to add 'something-now' to socket 
    // do I simply - will something simple as this work? 
    socket.on('something-new', session.something_new.bind(socket)); 
} 

exports.something_new = function(arg) { 
} 

這是正確的 - 它只是似乎錯了?

+0

真的不清楚你想讓你的程序做什麼或錯誤。 – ebohlman 2012-07-08 09:27:49

+0

你可以在函數參數中傳遞''socket'',或者將它們存儲在一個對象中(可以由用戶的會話ID鍵入,或者類似的東西)。 – 2012-07-08 09:29:27

+0

@ebohlman沒有錯。現在正在監聽'會話','登錄'和'註銷'。想要擴展功能來監聽'whatever.func'的'something-new'。這有幫助嗎? – 2012-07-08 09:30:00

回答

2

如果你只是想呼籲在插座事件 'whatever.func()' '的東西,新的'

socket.on('something-new', whatever.func(data)); 

socket.on('something-new', function(data){ 
    whatever.func(data); 
    whatelse.func(data.someproperty); 
}); 

應該工作,而 '數據' 是第一個論點通過了,當發佈「新事物」時。

+0

認爲我今天非常密集。如果你不介意的話,只是爲了確保你回答了問題而改變了。 – 2012-07-08 10:23:50

相關問題