Как синхронизировать несколько клиентских приложений с полноценным веб-сервисом? - PullRequest
2 голосов
/ 25 апреля 2019

Я работаю над проектом, в котором около 5 клиентов Android просматривают список элементов и становятся их владельцами.Все загружается через веб-сервис RESTful Java, а данные хранятся на сервере MySQL.

В приложение загружен список элементов, содержащий ИМЯ ПУНКТА и ВЛАДЕЛЬЦА.Когда кто-либо выбирает элемент, все остальные клиенты должны обновить его, чтобы показать, что такой элемент теперь принадлежит им.

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

Теперь у меня вопрос: каковы оптимальные методы обновления этого вновь выбранного элемента для всех клиентов, чтобы не перезагружатьвесь список без необходимости каждые n секунд?

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

Будет ли этого достаточно?

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

Извините, если этот тип вопросов не о переполнении стека, а об идее, где еще можно его опубликовать.Если это не подходит, пожалуйста, помогите мне в этом.

Заранее спасибо.

1 Ответ

0 голосов
/ 26 апреля 2019

Обычно частые короткие опросы - плохая идея.Все запросы будут влиять на производительность и пропускную способность клиента и сервера.В зависимости от вашего варианта использования, почти ни один запрос не приведет к изменениям.

Лучший подход - позволить серверу уведомлять клиентов об изменениях.Чаще всего это делается с помощью Firebase Cloud Messaging .Используя FCM, ваш сервер может уведомлять всех известных клиентов о любых изменениях.

В качестве альтернативы клиент может использовать «длинный опрос»: клиент отправляет HTTP-запрос, но сервер не отвечает, пока не произойдет изменение.

Также можно использовать WebSockets, но он может не вписаться в вашу архитектуру REST.

Короткий опрос

t01: Client: Hi Server, is there an update?
t02: Server: No
t03: Client: Hi Server, is there an update?
t04: Server: No
t05: Client: Hi Server, is there an update? 
t06: Server: Yes, here it is!
t07: Client: Hi Server, is there an update?
t08: Server: No
t09: Client: Hi Server, is there an update? 
t10: Server: Yes, here it is!

Длинный опрос

t01: Client: Hi Server, is there an update?
t06: Server: Yes, here it is!
t07: Client: Hi Server, is there an update?
t10: Server: Yes, here it is!

Firebase Cloud Messaging

t01: Client: Hi Server, I'm client123. Please keep me on track.
t06: Server: Hi client123. There was a change!
t10: Server: Hi client123. There was a change!

WebSockets

t01: Client: Hi Server, here I am. 
t06: Server: There was a change!
t10: Server: There was a change!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...