Позвольте мне рассмотреть то, что, по вашему мнению, вы называете потоком:
- Пользователь A регистрируется в местоположении A (допустим, это публичная c регистрация)
- Ваш сервер принимает решение какие другие пользователи должны уведомить об этой регистрации (в зависимости от близости местоположения) и отправить им уведомление socket.io, в котором перечислены пользователь и его новое зарегистрированное местоположение.
- Когда клиент получает это уведомление, он обновляет локальную карту, чтобы показать нового зарегистрированного пользователя, а затем (вероятно) предупреждает локального пользователя о том, что рядом с ним есть кто-то новый.
- Когда кто-то выходит из местоположения, вы повторяете проверку. в процессе, но на этот раз событие уведомляет их о том, что пользователь извлекает их, и клиент может удалить их из своей карты.
Лог c будет таким же, независимо от того, был ли он опубликован c или частная регистрация / оформление заказа. Единственная разница с частной регистрацией состоит в том, что вы анализируете местоположения друга только для того, чтобы решить, кого уведомлять, а не анализировать всех.
Итак, если это общий поток, кажется, что вам просто нужны общие возможность выяснить, кто находится поблизости (на определенном расстоянии) от места регистрации заезда / отъезда, чтобы вы могли уведомить их о регистрации заезда или отъезда.
Итак, для шаг 2, вам необходимо предварительно сохранить географическое местоположение c всех пользователей, которые хотят участвовать в этом потоке. Затем вы должны иметь возможность эффективно пробежаться по всему этому списку и выяснить, кто потенциально находится в пределах целевого расстояния от новой регистрации. Несмотря на то, что вы можете рассчитать абсолютное расстояние для каждого пользователя, вероятно, более эффективно сначала просто проверить, больше ли разница широты или долготы, чем какой-либо порог, потому что это будет означать, что более сложная математика не нужна, чтобы исключить их. В результате у вас останется только часть пользователей, чтобы выполнить полное сопоставление, чтобы убедиться, что они достаточно близки. Если вы сохраняете свой список пользователей отсортированным по чему-то вроде значения долготы, то было бы еще быстрее найти подмножество для сравнения фактического расстояния.
Как только вы найдете набор пользователей, которые находятся в пределах цели На расстоянии вы отправляете этому набору пользователей уведомление socket.io, объявляющее о новой регистрации. Когда эти клиенты получают это сообщение, они соответственно обновляют свои карты и делают любое уведомление пользователя. Вы можете сохранить этот набор пользователей, о котором вы уведомили, в комнате socket.io, но я не думаю, что это действительно необходимо (см. Шаги ниже).
На шаге 4 пользователь проверяет местоположение. Вы можете просто повторить процесс для шага 2. Узнайте, кто еще рядом, и отправьте им сообщение о выходе, и они соответствующим образом обновят свои карты. Если вы сохранили всех пользователей в комнате, вы можете просто передать эту проверку в комнату, но это создает некоторые проблемы, когда пользователи перемещаются после уведомления о регистрации (см. Ниже), и кажется, что вы можете просто использовать те же логи. c, который вы ранее использовали для шага 2, чтобы вычислить пользователей, которых нужно уведомить для шага 4.
Пользователи, которые перемещаются, когда проверены другие
Если пользователь B (который получил Уведомление о регистрации пользователя A) решает переместиться до того, как пользователь A извлечет деньги, вам нужно будет как обновить сервер, указав новое местоположение UserB, так и UserB обновить свою собственную карту. Когда они обновляют свою карту, они могут удалить все пометки с карты, которые теперь находятся слишком далеко от их нового местоположения (они сохраняют эту информацию локально и просто видят, кто сейчас находится слишком далеко). Когда они уведомляют сервер о своем новом местоположении, сервер затем повторяет Шаг 2 для своего нового местоположения и уведомляет их о любых пользователях, которые теперь находятся достаточно близко к ним, в зависимости от их нового местоположения.
Если вы использовали комнату чтобы сохранить исходный список пользователей для регистрации UserA, вам придется постоянно обновлять эту комнату каждый раз, когда кто-то в этой комнате меняет свое местоположение. Поскольку при каждом перемещении потенциально может быть много комнат, которые нужно обновлять, каждый раз, когда кто-то перемещается, кажется, что для этого требуется много обслуживания, просто пересчитайте, кто находится рядом, когда кто-то двигается, и вам уже нужно сделать этот расчет эффективным. во всяком случае, потому что он будет использоваться много.
Так что, в любом случае, это мои мысли. Надеюсь, это было полезно.