Websocket Server с витой и Python делает сложные задания в фоновом режиме - PullRequest
8 голосов
/ 06 июня 2011

Я хочу закодировать сервер, который обрабатывает клиенты Websocket, в то же время выбирая mysql с помощью sqlalchemy и удаляя несколько веб-сайтов одновременно (scrapy). Полученные данные должны быть рассчитаны, сохранены в БД и затем отправлены клиентам Websocket.

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

Ответы [ 2 ]

5 голосов
/ 11 июня 2011

Cyclone , «Сетевой инструментарий» на основе Twisted, основанный на / похожий на сервер Tornado Facebook / Friendfeed *, содержит поддержку WebSockets: https://github.com/fiorix/cyclone/blob/master/cyclone/web.py#L908

Вот пример кода:

Вот пример использования txwebsocket:

У вас могут быть проблемы с использованием SQLAlchemy с Twisted; из того, что я прочитал, они не работают вместе ( источник ). Вы женаты на SQLA или вам подойдет другой, более совместимый OR / M?

Некоторые дружественные по отношению к витой операционные системы включают в себя Storm (вилка) и Twistar , и вы всегда можете обратиться к библиотеке абстракций db ядра Twisted twisted.enterprise. adbapi . Существуют также дружественные к асинхронности библиотеки БД для других продуктов, такие как txMySQL , txMongo и txRedis и paisley (couchdb) .

Можно предположительно использовать и Cyclone (или txwebsockets), и Scrapy в качестве дочерних служб одного и того же MultiService, работающих на разных портах, но упакованных в одном экземпляре приложения. Службы могут обмениваться данными либо через родительский сервис, либо через какой-либо механизм RPC (например, JSONRPC , Perspective Broker , AMP , XML-RPC ( 2 ) и т. Д.), Или вы можете просто написать в БД из сервиса scrapy и прочитать его с помощью веб-сокетов. Redis отлично подойдет для этого IMO.

4 голосов
/ 06 июня 2011

В идеале вам следует избегать написания собственного сервера WebSockets, но поскольку вы используете Twisted, вы не сможете этого сделать: существует несколько реализаций WebSockets (см. этот поиск на PyPI).К сожалению, ни один из них не основан на Twisted [ Edit , см. Комментарий @ JP-Calderone ниже.]

Twisted должен управлять главным сервером, так что вы, вероятно, захотите начать с написанияэто можно запустить через twistd (см. здесь , если вы новичок в этом).Реализация WebSocket, упомянутая @ JP-Calderone и Scrapy, основана на Twisted, поэтому их следует использовать с вашего основного сервера на основе Twisted.SQLAlchemy будет более трудным, я прокомментировал это раньше в этом вопросе.

...