Лучшая практика для обработки событий 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
событие, как вы хотите, и все будут уведомлены.