Javascript 处理Socket.io事件的最佳实践?

Javascript 处理Socket.io事件的最佳实践?,javascript,node.js,sockets,events,javascript-events,Javascript,Node.js,Sockets,Events,Javascript Events,我正在从ajax轮询切换到socket.io实时数据推送,但我对管理事件的最佳实践有一个疑问 假设我有一个这样的基本服务器: var Clients = []; // Event fired every time a new client connects: io.on('connection', function(socket) { Clients.push(socket); // What else should go in here? // Individual f

我正在从ajax轮询切换到socket.io实时数据推送,但我对管理事件的最佳实践有一个疑问

假设我有一个这样的基本服务器:

var Clients = [];
// Event fired every time a new client connects:
io.on('connection', function(socket) {
    Clients.push(socket);
    // What else should go in here?
    // Individual functions for each event?

   socket.on('chat message', function(msg){
        console.log(':> '+msg);
        io.emit('chat message', msg);
    });

    // When socket disconnects, remove it from the list:
    socket.on('disconnect', function() {
        var index = Clients.indexOf(socket);
        if (index != -1) { Clients.splice(index, 1); }
    });
});
在本例中,有一个
聊天信息事件
,但理想情况下,还有许多其他事件我希望实时推送到客户端,例如:

用户发送消息,用户开始/停止键入,用户喜欢帖子,用户邀请您成为朋友/组成员,等等

我想实时捕获很多事件,但似乎总有比把
io.on()
语句塞满它们更好的方法

我已经研究了Node OOP,但不确定它在这个应用程序中是否一定有用

那么,在我们有
socket.on()
语句的地方,最好的做法是什么,包括像我所描述的那样的事件捕获

我想实时捕获很多事件,但它 似乎总有比死记硬背io.on()更好的方法 声明中充满了它们

没有。在
io.on('connection',…)
中,您有一个与新连接相关的
socket
变量的闭包。因此,您希望从该套接字响应的任何事件处理程序都会进入该套接字,或者进入从该套接字调用并将套接字传递给的某个函数。这就是它的工作原理

仅供参考,为了模块化,您不必将所有事件处理程序放在一个
io.on('connection',…)
中。如果将
io
对象导出到其他模块或在模块构造函数中传递给它们,则可以让其他模块创建自己的
io.on('connection',…)
侦听器,并在自己的
io.on('connection',…)
中安装自己的事件处理程序
io
是一个EventEmitter,因此它可以为
连接
事件支持任意多个侦听器,并将通知所有侦听器

我想实时捕获很多事件,但它 似乎总有比死记硬背io.on()更好的方法 声明中充满了它们

没有。在
io.on('connection',…)
中,您有一个与新连接相关的
socket
变量的闭包。因此,您希望从该套接字响应的任何事件处理程序都会进入该套接字,或者进入从该套接字调用并将套接字传递给的某个函数。这就是它的工作原理


仅供参考,为了模块化,您不必将所有事件处理程序放在一个
io.on('connection',…)
中。如果将
io
对象导出到其他模块或在模块构造函数中传递给它们,则可以让其他模块创建自己的
io.on('connection',…)
侦听器,并在自己的
io.on('connection',…)
中安装自己的事件处理程序
io
是一个EventEmitter,因此它可以为
连接
事件支持任意多个侦听器,并将通知所有侦听器。

@DanL-我添加了另一段关于模块化另一个选项的内容。@DanL-我添加了另一段关于模块化另一个选项的内容。