(“消息”)处理程序上定义Socket.io的最有效的方法

Socket.io的例子都遵循这种模式

io.sockets.on("connection", function(mySocket){ mySocket.on("my message", function(myData){ ... }); }); 

在我看来,这将为每个连接创build一个新的callback函数。 假设每个套接字都以相同的方式对消息做出响应,那么为所有的套接字定义一次处理程序就没有更高的内存效率了:

 function myMessageHandler(data){ ... } io.sockets.on("connection", function(mySocket){ mySocket.on("my message", myMessageHandler); }); 

甚至这个:

 io.sockets.on("my message", function(mySocket, myData){ ... }); 

如果是这样,为什么Socket.io会推荐一种浪费内存的做法? 我们期望在“连接”callback的闭包中保持套接字的有状态variables吗?

从另一个angular度来看,第一种forms很容易阅读(因为这么多的细节被忽略了)。 我认为这种forms最能说明图书馆是如何工作的。 我相信,在Node网站上使用类似的风格也是出于同样的原因。 我想这正是为什么在这些地方使用它。

几分钟后阅读博客和讨论表明,开发人员通常select传递命名函数。 虽然我确信它有一个性能上的好处,但主要的动机无疑是可读性。 我想你会发现第二种forms(或更多的表单)随着你的职能的增长而变得更容易处理。