Я читаю документацию по Socket.io для комнат topi c в разделе Комната по умолчанию : https://socket.io/docs/rooms/
В нем упоминается следующее:
For your convenience, each socket automatically joins a room identified by its own id.
This makes it easy to broadcast messages to other sockets:
io.on('connection', socket => {
socket.on('say to someone', (id, msg) => {
socket.to(id).emit('my message', msg);
});
});
1 - Из приведенного выше кода означает ли это, что одна и та же комната может быть определена каждым из пользователей 'собственный идентификатор сокета, подключенного к этой комнате. Т.е. комната может быть идентифицирована по идентификаторам сокетов нескольких пользователей, если эти пользователи подключены к комнате?
2- Передается ли широковещательное сообщение (msg
) в комнату всем сокетам других пользователей , включая или исключая пользовательский сокет, который передал сообщение?
Продолжение ...
Примеры вариантов использования
- широковещательные данные каждому устройство / вкладка данного пользователя
io.on('connection', async (socket) => {
const userId = await fetchUserId(socket);
socket.join(userId);
// and then later
io.to(userId).emit('hi');
});
3- В приведенном выше примере кода userId
, которое мы получаем, такое же, как socketId
, или это другое?
4- Также означает ли это, что мы используем userId
для доступа к комнате (к которой подключен пользователь), чтобы: сначала присоединиться к комнате; затем передать сообщение hi
не только пользователю, но и всем другим пользователям в комнате? Или я неправильно понял этот момент?
Продолжение ...
- отправлять уведомления о данном объекте
io.on('connection', async (socket) => {
const projects = await fetchProjects(socket);
projects.forEach(project => socket.join('project:' + project.id));
socket.on('update project', async (payload) => {
const project = await updateProject(payload);
io.to('project:' + project.id).emit('project updated', project);
});
});
5- В коде выше , Я не понял, что он делает. В частности, что представляет projects
, который мы получаем из объекта сокета?
6- Что делает socket.join('project:' + project.id)
?
7- Является ли 'update project'
обычным событие или часть собственного кода Socket.io (то есть такое же, как событие 'connection'
)?
8- Что означает payload
, который мы передаем слушателю событий?
Заранее спасибо.