2014-09-11 2 views
0

Я пытаюсь создать приложение python, которое может непрерывно получать данные с веб-сервера. Это приложение python будет работать на нескольких персональных компьютерах, и всякий раз, когда появятся новые данные, он получит его. Я понимаю, что могу сделать это либо длинным опросом, либо веб-сокетами, но проблема в том, что иногда данные не будут передаваться в течение нескольких дней, и в этом случае длинные опросы или веб-сайты кажутся неэффективными. Я не буду нуждаться в таком длинном соединении, но всякий раз, когда данные доступны, мне нужно будет нажать его в приложение. Я читал о webhooks, и кажется, что если у меня может быть URL-адрес для отправки этих данных, мне не нужно будет опроса. Но я смущен тем, как каждый клиент будет иметь URL-адрес обратного вызова, потому что в этом случае клиент должен будет действовать как сервер. Есть ли библиотеки, которые помогают в этом? Любые ресурсы, которые вы можете мне указать, были бы очень полезными!Возможно ли внедрить webhooks на обычных клиентах?

ответ

1

backchoi32,

То, что вы хотите сделать, это прочитать на REST architecture. По сути, ваши клиенты собираются выполнить запрос POST на определенный ресурс, позвольте нам назвать ресурс clients. То, что могут сделать ваши клиенты, выполняет запрос GET на «/: cliend_id», и когда это произойдет, ваш задний конец может продолжить сохранение этой информации в вашей базе данных.

В Python существует множество веб-фреймворков RESTful, несколько популярных - Django и Flask.

Эта статья из Python Дневник называется, «Creating a simple CRUD application» и этот слайд поделилась под названием «Basic CRUD in Django» научит вас, что вам нужно знать о написании RESTful веб-сервис, который имеет основной (C) reate (R) Свинец (U) pdate (D) elete.

Все, что вам нужно для беспокойства на вашей стороне клиента, заключается в том, чтобы убедиться, что вы получаете обратно 200 status code назад, что будет сигнализировать вашему клиенту о том, что он успешно выполнил запрос к вашему внутреннему сервису и что если вы выполнили POST/PUT все было сохранено. Если он не возвращает 200, тогда вы можете добавить функциональность для устранения сбоев, избыточности и отказоустойчивости.

Пожалуйста, дайте мне знать, если у вас есть вопросы!

+0

Благодарим вас за ответ, но как это отличается от длительного опроса? Потому что у меня все равно был бы клиент, чтобы периодически «/: cliend_id/results», чтобы проверить, доступны ли данные, верно? Также я хотел бы, чтобы бэкэнд отправлял данные на URL-адрес, который затем может быть получен клиентом. – bachkoi32

+0

Эй, @ bachkoi32, отличный вопрос! При длительном опросе, если сервер не имеет никакой информации, доступной клиенту при получении опроса, вместо отправки пустого ответа сервер держит запрос открытым и ожидает, когда информация о доступе станет доступной. В том, что я предлагаю, вы можете просто настроить своих клиентов периодически проверять свои ресурсы на сервере (это может быть каждый час, каждые 6 часов, каждый день), и все. Если он доступен, он отправляется вашему клиенту, если нет, то вы ждете следующего запроса клиента. –

+0

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

0

Невозможно отправить данные клиенту без какого-либо соединения, например. либо websockets, либо (длинный) опрос, выполненный клиентом. Хотя теоретически можно было бы открыть сокет-слушатель на клиенте и позволить веб-серверу подключаться и отправлять данные в этот сокет, это не сработает в реальности. Основная причина заключается в том, что клиент часто находится внутри внутренней сети, недоступной извне, то есть типичная домашняя установка с несколькими компьютерами за одним IP или корпоративной установкой с межсетевым экраном между ними. В этом случае можно установить соединение только извне, но не в другую сторону.

Смежные вопросы