В настоящее время я создаю приложение случайного чата, в котором пользователь нажимает кнопку и соединяется с другим пользователем, а затем они могут общаться в чате.
Я планирую использовать Parse для управления пользователями и хранения файлов, а pubnub - для чата.
У меня вопрос: как правильно соединить и связать двух пользователей и отправить их в чат вместе?
Допустим, пользователь1 нажимает кнопку поиска, чтобы начать поиск другого пользователя, статус пользователя1 в затем база данных синтаксического анализа обновляется до «поиска», и приложение затем запрашивает в базе данных другого пользователя, статус которого также «ищет». запрос возвращает user2, и новый канал чата создается из двух имен пользователей, объединенных вместе (например, Pubnub Chat Channel: 'user1user2').
Пользователь User1 затем помещается в этот канал чата, и начинается чат. Вот где я запутался, как тогда мое приложение узнает, что ему нужно поместить user2 в чат с user1? Потому что, по моему мнению, user2 также нажал кнопку поиска, чтобы запросить базу данных синтаксического анализа для другого пользователя, и поэтому они могут быть помещены в чат с другим случайным пользователем, а не с user1.
Мы будем очень благодарны за любую помощь в выборе правильного метода для достижения этой цели, спасибо.
Android - правильное сопряжение и подключение двух пользователей в случайном приложении чата с помощью синтаксического анализа и pubnub
Ответы (1)
Это отличный вариант использования. Вот некоторые сведения о том, как начать работу с этим дизайном.
Настраивать
- Каждому пользователю будет присвоено уникальное имя канала и уникальная группа каналов. , например,
ch_user123
иcg_user123
соответственно. - Будет три группы каналов, управляемых сервером, с именами
cg_idle
,cg_searching
,cg_active
. Эта группа каналов будет содержать все уникальные имена каналов пользователей пользователей, которые не активно участвуют в чате и не ищут партнера по чату.
Логин пользователя
Когда пользователь входит в систему (успешно), ваш сервер добавит уникальный канал этого пользователя в группу каналов idle
и в уникальную группу каналов пользователя (IOW - добавьте ch_user123
в cg_user123
и в cg_idle
Поиск чат-партнера
Когда пользователь нажимает кнопку поиск партнера по чату, ваше серверное приложение
- удалить уникальный пользовательский канал из
cg_idle
группы каналов - добавить уникальный пользовательский канал в
cg_searching
группу каналов list_channels
изcg_idle
, чтобы получить список кандидатов в чат-партнеры.- выберите канал пользователя из списка
cg_idle
кандидатов - убедитесь, что выбранный кандидат все еще неактивен
- если пользователь больше не бездействует, тогда он активен или ищет - выберите другого пользователя из списка незанятых (необходимо снова перечислить каналы
cg_idle
, чтобы получить обновленный список) - IOW, вернитесь к шагу 4 em > - если пользователь все еще бездействует, удалите канал этого пользователя из
cg_idle
и добавьте его вcg_active
- удалите канал ищущего пользователя из
cg_searching
и добавьте его вcg_active
- добавить новое сгенерированное имя канала (вы можете использовать API UUID для создания имени формата UUID) в уникальные группы каналов обоих пользователей. Например, добавьте новое имя канала
1234-5678-9ABC
кcg_user123
иcg_user456
. Эти два пользователя не подписаны на один и тот же канал, чтобы начать свое приключение в чате друг с другом. - теперь ваш сервер может публиковать сообщение на этом новом канале, знакомя пользователей друг с другом (ваше клиентское приложение может отображать аватар, информацию о пользователе или даже запустить видеопоток, если вы это делаете).
- если один из пользователей нажимает кнопку выхода, уникальные каналы обоих пользователей удаляются из
cg_active
, добавляются вcg_idle
, а общий чат-канал удаляется из уникальных групп каналов обоих пользователей.
Я могу подумать о нескольких деталях и функциях, которые необходимо было бы рассмотреть выше, и условиях гонки, которые ваша служба будет контролировать, но это должно показать, как вы можете использовать группы каналов для управления состоянием пользователей и способ создания каталога имен пользователей.
person
Craig Conover
schedule
18.11.2015
хороший ответ @ craig-conover!
- person Stephen Blum; 19.11.2015
Спасибо, очень лаконичный и очень полезный ответ!
- person Paul Alexander; 19.11.2015