использование PubNub для общения нескольких пользователей

Я разрабатываю приложение, которое использует PubNub для сообщений в реальном времени. Я столкнулся с проблемой в чате один на один. Это мой сценарий:

У меня есть пользователь A, поэтому, если A хочет получать все сообщения от другого, A должен подписаться на общедоступный канал, называемый каналом PUB.

Пользователь B знает общедоступный канал A, поэтому B или кто-то другой может отправлять сообщения на этот канал. Вот сейчас нормально.

НО, когда я открываю приложение, я хочу отобразить список пользователей, которым я отправил сообщение, или автономных сообщений, которые мне прислал НОВЫЙ человек.

Я могу получать все сообщения из моего общедоступного канала. а как фильтровать с пользователем? в случае большого количества сообщений это так сложно.

Со всеми ними я хочу получать сообщения только обо мне и C или обо мне и B ... и т. Д. У кого-нибудь есть идеи для этого? Спасибо,


person The Bird    schedule 13.04.2014    source источник


Ответы (1)


Многопользовательский чат PubNub и общение

У каждого пользователя есть свой выделенный канал. У Боба есть канал "bob12345", а у Салли — канал "sally12345". Когда пользователи хотят поговорить друг с другом, они отправляют сообщение непосредственно на имя канала владельца. Боб будет pubnub.publish({...}) на канале Салли.

pubnub.publish({ 
    channel : 'sally12345', 
    message : { from: 'bob12345', message: 'Hi!' }
});

Обратите внимание, что вам потребуется предоставить глобальный доступ для записи с помощью PubNub Access Manager для предоставления права записи. -доступ только глобально. Также предоставьте владельцу канала доступ только для чтения.

Каждый пользователь всегда должен хранить свои сообщения локально на своем устройстве или загружать всю историю и сохранять.

Как загрузить разговор только между двумя пользователями

Если вы хотите загрузить сообщения из беседы определенного пользователя, вам потребуется опубликовать их на стороннем канале, чтобы проиндексировать сообщения для последующего извлечения. Вы можете сделать это, опубликовав на частном стороннем канале, который является конкатенацией имен каналов Боба и Салли.

// Publish a second time to index the message in a side channel.
pubnub.publish({ 
    channel : 'history-sally12345-bob12345', 
    message : { from: 'bob12345', message: 'Hi!' }
});

Теперь вы можете загрузить историю для этого конкретного пользователя.

// Load history for dedicated conversation.
pubnub.history({ 
    channel  : 'history-sally12345-bob12345', 
    callback : function(messages) { 
        console.log(messages);
    }
});
person Stephen Blum    schedule 13.04.2014
comment
Я думаю по-вашему, с общедоступным каналом для получения всех запросов и каналом истории для разговора между двумя пользователями. - person The Bird; 14.04.2014
comment
В случае нового сообщения пользователя или когда я не в сети, я имею в виду пользователя A, сообщение мне 3 раза, 1-2-3, я заменю сообщение 1 на 2, а 2 на 3, поэтому 3-е сообщение будет хранить на общедоступном канале (также хранить все сообщения в моем канале истории с A). Но меня беспокоит, когда на общедоступном канале много сообщений, например, сообщение 2000 пользователей, если я хочу заменить 1-е сообщение A, я должен получить все сообщения, поэтому я не знаю, могу ли я это сделать или нет? - person The Bird; 14.04.2014
comment
В этом случае вы захотите загрузить все сообщения или просто установить ограничение на количество сообщений и игнорировать любые изменения. Также у меня есть скрытый URL-адрес, который может содержать то, что вы ищете, когда речь идет об изменениях синхронизации данных. Отправьте мне электронное письмо по адресу [email protected], и я могу отправить вам ссылку. - person Stephen Blum; 14.04.2014