Лучшая практика для обработки событий Socket.io?

Я переключаюсь с опроса 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); }
    });
});

В примере есть chat message событие, но в идеале есть много других событий, которые я хотел бы передать клиентам в режиме реального времени, таких как:

Пользователь отправляет сообщение, пользователь начинает / прекращает печатать, пользователь любит сообщение, пользователь приглашает вас стать друзьями / участником группы и так далее.

Есть много событий, которые я хотел бы запечатлеть в режиме реального времени, но кажется, что должен быть лучший способ, чем зубрить io.on() заявление полно их всех.

Я посмотрел на Node OOP, но не уверен, что это обязательно поможет в этом приложении.

Так где у нас есть socket.on() Скажите, какой будет наилучшая практика для включения событий, как я описал?

1 ответ

Решение

Есть много событий, которые я хотел бы записать в режиме реального времени, но кажется, что должен быть лучший способ, чем заполнять оператор io.on(), полный их всех.

Нету. Внутри io.on('connection', ...) где у вас есть закрытие с socket переменная, которая относится к новому соединению. Таким образом, любой обработчик событий, на который вы хотите ответить из этого сокета, входит туда или в какую-то функцию, которую вы оттуда вызываете и передаете сокет. Вот только как это работает.

К вашему сведению, в интересах модульности вам не нужно помещать все обработчики событий в один io.on('connection', ...), Если вы экспортируете io возражать другим модулям или передавать их в конструктор модулей, другие модули могут создавать свои собственные io.on('connection', ...) слушатели и установить свои собственные обработчики событий внутри своих io.on('connection', ...), io EventEmitter, поэтому он может поддерживать как можно больше слушателей connection событие, как вы хотите, и все будут уведомлены.

Другие вопросы по тегам