Отправка уведомления пользователю об изменении базы данных - PullRequest
6 голосов
/ 02 апреля 2011

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

Для каждого блюда, предлагаемого в кафетерии, с ним связан уникальный файл dish.id.

До сих пор у меня есть купол, похожий на то, что ученик отправляет запрос POST с тарелкой, идентификатором и номером счетчика на URL-адрес, который обновляет «таблицу заказов» (в которой идентификатор PK). Когда блюдо готовится, владелец счетчиканажимает кнопку «Готово».

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

Как я долженсделать это? Один из способов - просто создать представление с аргументом customer.id & status и ответом True или Flase. Я могу просто опросить URL и предоставить уведомление, если получу True.

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

Ответы [ 5 ]

2 голосов
/ 02 апреля 2011

Это действительно зависит от того, что вам действительно нужно.

Если уведомление может быть отправлено как часть активности пользователя, просто добавьте сообщение пользователя, и оно будет отображаться всякий раз, когда пользователь выполняет действие на странице. django.contrib.messages плюс несколько строк в вашем основном html-шаблоне сделают это.

Но если вы хотите, чтобы уведомление было интерактивным - вы можете использовать одну из нескольких PUSHoptions

Интересные ссылки:

Со стороны серверов доступно несколько вариантов, самый простой - Зеленый Единорог .Его использование позволит вам открыть несколько тысяч соединений и управлять ими всего несколькими процессами.

1 голос
/ 02 апреля 2011

Я не знаю, правильно ли вы поняли, но я думаю, что вы должны использовать websockets

 http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/ 
0 голосов
/ 02 апреля 2011

Существует два возможных способа ...

  1. Переопределить связанные модели1009 *

  2. Вы можете использовать сигналы , как описано здесь

Использование admin.save_model проще и соответствует вашим потребностям.Поскольку у вас есть table_id, вы можете установить статус заказа этих таблиц на «готовится».

0 голосов
/ 02 апреля 2011

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

Существуют более эффективные, но более сложные способы толкания сервера, посмотрите статью, на которую я ссылался выше.

0 голосов
/ 02 апреля 2011

Поскольку мы не можем передать данные через http, я думаю, что опрос - это единственный оставшийся вариант.

Вы можете сделать ajax-запрос на опрос, который можно использовать для обновления некоторых других параметров (если таковые имеются), а также для повышения интерактивности:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...