Подтвердить что ты не робот

Общественный чат с радиусом с использованием Firebase (запрошенные предложения)

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

Я использую firebase для своего приложения, и настройка проста между двумя пользователями или группой пользователей. Я создаю отдельную комнату на основе контрольной точки в Firebase, которая позволяет пользователям в этой группе получать доступ к сообщениям.

Теперь скажем, что я в Лос-Анджелесе, я хочу, чтобы пользователи могли общаться с другими пользователями, находящимися в радиусе 1 мили от их местоположения (lat/lng). Я знаю, что это возможно, поскольку есть приложение, которое делает это, которое можно найти на https://itunes.apple.com/sg/app/popcorn-messaging/id718416705?mt=8.

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

Один из способов подумать об этом - создать чат во всем мире с шагом в милю. Например, начните с lat: 0, lng: 0, а затем переместите милю вправо, затем еще на милю вправо и т.д., Однако это приносит больше вреда, чем пользы. У меня будет миллионы чатов, и не все они будут использованы.

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

Любые предложения будут очень благодарны.

4b9b3361

Ответ 1

Если вы уверены, что хотите, чтобы это было 1 миля на 1 милю или любое заданное расстояние, я думаю, что предопределенные чаты во всем мире с шагом в милю - лучший вариант. Это будет намного проще, если добавлять новых пользователей и избегать совпадений, когда люди перемещают места. Если вы используете firebase, и вы правильно сглаживаете свои данные, вы не будете слишком сильно болеть, если будете иметь пустые комнаты.

Единственная причина, по которой я не могу этого сделать, - это беспокоиться о том, что чаты становятся слишком полными или слишком пустыми. Я не уверен, что это проблема для вашего приложения, но это, безусловно, было бы недостатком в предопределенных местах. Даже тогда вы могли бы использовать предопределенные местоположения и масштабировать назад (разделяя комнаты) или увеличивать масштаб (объединяя комнаты вместе) в зависимости от количества людей в комнатах.

Надеюсь, это поможет. Если вы ищете больше направлений, не могли бы вы рассказать нам немного больше о вашем заявлении?

ОБНОВЛЕНИЕ: Я понимаю, о чем вы говорите. После дальнейших размышлений, я все еще думаю, что предопределенные области были бы лучшим способом. Даже если вы создадите новые области спонтанно, по-прежнему будет точка, где вам нужно будет разбить комнаты (провести границы между комнатами) и пользователей по обе стороны от этой линии, даже если они находятся рядом друг с другом, будет в разных комнатах.

Если он основан только на lat/lng и радиусе вокруг этих пользователей, это может привести к нечетным результатам. Например, если пользователь B находится в комнате с пользователями A и C, но пользователи A и C слишком далеки друг от друга, они могут видеть некоторые очень странные сообщения чата. Например, если этот радиус равен 1 мили, User A может быть в Mile 0, User B может быть в Mile 1, а User C может быть в Mile 2. Итак, чтобы User A (кто может видеть только User A и User C), чат может выглядеть так:

User A: Hello there! What is 2+2?
User B: 4
User A: Thank you!
User B: George Washington
User A: What?!?!

To User B (кто будет единственным, кто увидит все сообщения), он может выглядеть так:

User A: Hello there! What is 2+2?
User B: 4
User A: Thank you!
User C: Who was the first president of the United States?
User B: George Washington
User C: Thank you!
User A: What?!?!

В User C (кто может видеть только User B и User C), он может выглядеть так:

User B: 4
User C: Who was the first president of the United States?
User B: George Washington
User C: Thank you!

Кажется, что это довольно быстро вышло из-под контроля. После всего этого, я думаю, мое первоначальное предложение по-прежнему остается лучшим, но я думаю, что у всех из них будут проблемы. Удачи!

Ответ 2

Я бы сделал это следующим образом:

Концептуально, чат - это список пользователей.

Что вы можете сделать, так это вычислить "чат-комнату" для каждого пользователя, когда он/она входит в систему. Как отмечает @Luke, у вас будут границы для радиуса географии и минимального/максимального числа пользователей, которых вы возвращаете.

Эти так называемые чаты (которые фактически являются списками соседних пользователей) могут кэшироваться на основе некоторой пользовательской подписи (пользовательский агент IP +)

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

Вы можете ограничить вычисление, чтобы получить пользователей в радиусе 300, а затем вычислить близость в радиусе 100

Другой подход: вы можете построить диаграмму Voronoi пользователей и представить соседние зоны для заданных пользователей в качестве соседей по протоколу

Ссылка: https://en.wikipedia.org/wiki/Voronoi_diagram