В настоящее время я оцениваю AWS AppSync как серверное решение для приложения для обмена сообщениями.
У пользователей будет представление для изучения новых групп чатов и другое представление, в котором они увидят список своих объединенных и закрытых чатов (в списке должны отображаться имя и последнее сообщение чатов). Каждый чат, конечно же, будет иметь подробный вид, в котором отображаются все сообщения.
Вопрос в том, как оформить подписку. Моя Мутация для отправки сообщения будет выглядеть примерно так:
createMessage(
content: String,
conversationId: ID!,
createdAt: String!,
id: ID!
): Message
Согласно документации по подписке у меня есть только две возможности создать подписку. Либо я подписываюсь на все новые сообщения, либо на все новые сообщения из определенного разговора, используя идентификатор разговора в качестве аргумента. Поэтому в моем случае мне нужно было бы получить все разговоры пользователей, а затем сделать звонок по подписке для каждого отдельного разговора. Почему-то это кажется проблемой, но я не вижу другого пути (например, пользовательская фильтрация в настоящее время невозможна (по этой ссылке))
Есть ли лучший способ подписаться на новые сообщения для определенного набора сообщений (только в разговорах, на которые я подписан)? Является ли проблемой наличие потенциально сотен активных подписок на клиенте?
заранее спасибо Лука


Ты прав. Единственные два способа сделать это из коробки - это:
Если вы подписываетесь на каждый диалог с помощью аргумента (вариант №1), вы можете пакетно отправлять запросы на подписку в одном HTTP-запросе. Например. Отправляйте до 50 подписок с разными аргументами разговора в одном запросе.
Есть третий вариант, при котором вы можете больше поработать, чтобы обеспечить эффективность работы с клиентами. Этот вариант предполагает настройку обратного индекса разговоров с клиентом.
Если бы вы использовали лямбда-функцию, лямбда-функция выполняла бы следующие действия: 1) Подпишитесь на все новые сообщения 2) Для каждого нового сообщения: 2.1) Определите, для какого разговора это сообщение было. 2.2) Найдите клиентов, которые заинтересованы в этом сообщении 2.3) Для каждого заинтересованного клиента опубликуйте новое сообщение. Чтобы реализовать часть публикации для отдельных клиентов, вы должны отправить мутацию в AppSync для каждого клиента. Примерно так: mutation {publishMessage (client: $ clientId) {yourMessage}}
Хорошо понял. Поскольку написание одного сообщения может привести, скажем, к 100 мутациям (если в беседах участвуют 100 пользователей), я немного поэкспериментирую с вариантом 1 и, возможно, просто проведу опрос для просмотра моего списка и подпишусь на конкретный чат только в деталях. чтобы быть более рентабельным. Еще раз спасибо за помощь, Майкл, очень признателен!
Большое спасибо, Мичил, я рассмотрю второй и третий варианты. Что касается варианта 3: я не знаю, как выполнить часть «публиковать для каждого клиента». Предположим, что моя бэкэнд-работа будет lamda-функцией, которая будет потреблять все сообщения, затем фильтровать нужных клиентов (используя индекс идентификатора клиента) и публиковать. Как мне закодировать часть публикации?