我只是想证实我的怀疑。
我偶然发现了一篇文章,它建议以下列方式使用 Socket.io:
var app = require('express').createServer()
var io = require('socket.io').listen(app);
app.listen(8080);
// Some unrelated stuff
io.sockets.on('connection', function (socket) {
socket.on('action1', function (data) {
// logic for action1
});
socket.on('action2', function (data) {
// logic for action2
});
socket.on('disconnect', function(){
// logic for disconnect
});
});
我觉得以下会更好地利用资源:
var app = require('express').createServer()
var io = require('socket.io').listen(app);
app.listen(8080);
// Some unrelated stuff
io.sockets.on('connection', function (socket) {
socket.on('action1', action1);
socket.on('action2', action2);
socket.on('disconnect', disconnect);
});
function action1(data) {
// logic for action1
}
function action2(data) {
// logic for action2
}
function disconnect() {
// logic for disconnect
}
我的感觉是,虽然处理connection
事件的匿名函数只在内存中创建一次,但处理action1
,action2
和的匿名函数是disconnect
为每个套接字连接在内存中创建的。第二种方法的问题socket
是不再在范围内。
那么首先,我对创建函数的怀疑是真的吗?其次,如果是这样,有没有办法进入socket
命名函数的范围?