Python, используя правильный сокет - PullRequest
0 голосов
/ 04 декабря 2018

Я использую Google Cloud и Google App Engine, и я хочу, чтобы один из наших сервисных API использовал соединение socket вместо обычного HTTP-соединения, когда запрос получен и ответ отправляется один раз на запрос.

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

Я прочитал несколько документов, и документы Google App Engine для сокетов предлагают использовать библиотеку сокетов.Но в нижней части документа они предоставляют пример приложения, которое использует Google App Engine с сокетами, но сокет в примере приложения сделан из nntplib, а не socket.Сколько существует библиотек python, где сокет может быть сделан / использован, и какой сокет мне следует использовать для такого рода соединений.постер, поэтому я не уверен, что это правильный тип сокетного соединения, который я должен использовать для отправки текущих данных пользователей в режиме онлайн пользователям на интерфейсной стороне.

https://docs.python.org/2/library/nntplib.html

Должен ли япросто используйте

socket.socket()

РЕДАКТИРОВАТЬ: https://cloud.google.com/appengine/docs/standard/python/sockets/#making_httplib_use_sockets

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Моими первоначальными намерениями было не использовать какие-либо дополнительные услуги или сборы, такие как многие замечательные, предложенные @dhauptman, но в соответствии с документами Google App Engine для сокетов (Python 2.7) это выглядит так: Python Sockets GoogleApp Engine

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

Другой вариант - использовать библиотеку httplib вместо urlfetch в Google App Engines.При использовании библиотеки httplib ее можно настроить на использование соединения с сокетом в файле app.yaml.Это позволит преодолеть проблему достижения пределов urlfetch.

0 голосов
/ 04 декабря 2018

Если бы я понял, какой тип соединения вам нужен, Websockets было бы хорошей идеей, чтобы вы могли создать полнодуплексный канал связи.Однако Google App Engine (GAE) пока не поддерживает веб-сокеты.В соответствии с этой публикацией она скоро будет реализована для GAE Flexible.

В GAE есть запрос на добавление функций для веб-сокетов, вы можете отслеживать обновления по этой ссылке

Тем временем, если вам нужны Websockets, вы должны использовать экземпляры Compute Engine

Что касается поддержки сокетов в GAE, вы можете использовать любую библиотеку, которая импортирует сокет (poplib,nntplib и т. д.), которые не нарушают некоторые ограничения и ограничения, перечисленные здесь .

...