Как правильно отписаться от комнаты socket.io и уничтожить ее? - PullRequest
4 голосов
/ 29 августа 2011

У меня есть внутренний цикл для каждого сокета:

if (!chat.room.list[hash]) { // room has expired
    socket.leave(hash);
    delete chat.user.list[socket.store.data.id].rooms[hash];
    delete socket.store.data.inRooms[hash]; // delete room hash from user store
}

socket.leave(hash) ничего не делает - сокет все еще принимает сообщения, отправленные в hash комнату.

Как примечание стороны - еслиЯ соединяюсь с клиентом Анной и клиентом Бобом - оба получают сообщения, но если я снова соединяюсь с клиентом Бобом - Боб не может отправлять сообщения Анне.примеры socket.leave (комната)?

РЕДАКТИРОВАТЬ: Понял!Socket IO сохраняет комнатные ручки с косой чертой, поэтому вы должны использовать socket.leave('/'+hash)

Ответы [ 4 ]

4 голосов
/ 06 января 2012

Комнаты в socket.io неявно создаются и неявно удаляются.В основном они автоматически удаляются, когда они пусты.

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

Попробуйте запустить console.log(io.sockets.manager.rooms) всякий раз, когда создается комната, чтобы взглянуть на то, что происходит внутри.

3 голосов
/ 18 января 2012

Начиная с 0.8.7, я попробовал это, и, кажется, вам больше не нужно добавлять / (слэш)

socket.leave(hash)

Работает просто отлично.

1 голос
/ 22 сентября 2014

SocketIO 1.0 имеет Socket.prototype.leave(roomName) и Socket.prototype.leaveAll().

И вам не нужно вручную удалять комнаты:

После отсоединения розетки автоматически покидают все каналы, частью которых они были, и с вашей стороны никаких специальных демонтажей не требуется. [Отсюда]

0 голосов
/ 02 января 2012

В некотором роде касательная, но чтобы ответить на часть вашего вопроса о полной документации по socket.io: Однако, не совсем, если вы посмотрите источник на домашней странице socket.io , вы можете найти немного скудной документации (просмотрите источник и CTRL + F для "комнат"). Я должен был сделать это уже несколько раз. Там нет ничего о том, чтобы оставлять комнаты, но есть некоторые общие объяснения.

Вид-источник: http://socket.io

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...