Как сохранить синхронизацию очереди между сервером и браузером? - PullRequest
2 голосов
/ 24 июня 2011

У меня есть таблица (которая представляет очередь элементов), строки которой можно переупорядочить, используя сортируемый плагин jQuery. Пользователь может изменить порядок своей очереди, и обновленный заказ прекрасно сохраняется на сервере.

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

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

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

Мне любопытно, если кто-нибудь решал подобную проблему раньше. Любые идеи или рекомендации будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Периодический пейджинг - это путь, но я бы добавил, что вы, вероятно, не хотите обновлять таблицу, если ничего не изменилось.Возможно, сохраните поле «последнее обновление» в своих записях и проверьте, является ли последнее обновление> попытка последней страницы решением.

1 голос
/ 24 июня 2011

Обычный подход к этой проблеме заключается в периодическом (возможно, порядка 10 секунд) частичном обновлении страницы с помощью Ajax. Если случится так, что состояние клиента устарело, вы должны сообщить об этом пользователю и восстановить состояние клиента, которое будет синхронизировано с состоянием сервера. Восстановление может быть достигнуто несколькими способами: проще всего было бы просто отказаться от изменений клиента и обновить состояние сервера. Сложнее будет попытаться объединить состояние клиента с состоянием сервера, что гораздо удобнее.

...