Проверяет понимание механизмов real-time коммуникации между клиентом и сервером для отслеживания статуса прочтения сообщений в чате.
В чатах статус прочтения — это отдельное событие, которое клиент отправляет на сервер, а не что-то, что сервер может определить сам. Backend не знает, что пользователь физически увидел сообщение, пока клиент явно об этом не сообщит. Поэтому архитектура строится вокруг двустороннего канала связи, чаще всего WebSocket.
message:read с ID чата и списком ID сообщений.message:read остальным участникам через WebSocket или pub/sub (Redis, Kafka).io.on('connection', (socket) => {
socket.on('message:read', async ({ chatId, messageIds, userId }) => {
// проверяем, что пользователь в чате
const isMember = await chatRepo.isMember(chatId, userId);
if (!isMember) return socket.emit('error', 'forbidden');
// обновляем статус в БД
await messageRepo.markAsRead(chatId, messageIds, userId);
// уведомляем остальных участников
socket.to(`chat:${chatId}`).emit('message:read', {
chatId,
messageIds,
userId,
readAt: Date.now(),
});
});
});
message_reads(message_id, user_id, read_at).Такой подход применяется в мессенджерах, поддержке, соцсетях и любых системах с real-time уведомлениями. Он даёт точный контроль над статусом и легко масштабируется при правильной организации pub/sub.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
Node.js
Networks
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию