Socket.io的例子都遵循这种模式
io.sockets.on("connection", function(mySocket){
mySocket.on("my message", function(myData){
...
});
});
在我看来,这会为每个连接创建一个新的回调函数。假设每个套接字都以相同的方式响应消息,为这样的所有套接字定义一次处理程序不会更高效:
function myMessageHandler(data){
...
}
io.sockets.on("connection", function(mySocket){
mySocket.on("my message", myMessageHandler);
});
甚至是这样:
io.sockets.on("my message", function(mySocket, myData){
...
});
如果是这样,为什么Socket.io会推荐一种浪费内存的做法?我们是否希望在“连接”回调的闭包内保留套接字的有状态变量?
答案 0 :(得分:0)
从另一个角度来看,第一种形式很容易阅读(因为遗漏了很多细节)。我认为这种形式最能说明图书馆的运作方式。我相信,Node网站本身使用了类似的风格,原因相同。而且我认为这正是它们在那些地方使用的原因。
几分钟后阅读博客和讨论表明开发人员通常选择传递命名函数。虽然我确信其中有性能提升,但主要动机无疑是可读性。我认为随着你的职能的增长,你会发现第二种形式(或更抽象的形式)更易于使用。
答案 1 :(得分:0)
以最有效的方式定义Socket.io:
io.on('connection', function (socket) {
socket.on('new-message', function (data) {
io.emit('emit-message', data)
});
});
或
io.on('connection', (socket) => {
console.log('user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
});