Отправка сообщений между двумя серверами Python - PullRequest
2 голосов
/ 20 апреля 2010

У меня есть два сервера - один Django, другой, вероятно, будет написан на Python - и один помещает «задачи» в базу данных, а другой обрабатывает эти задачи.

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

Есть ли какие-нибудь простые способы для двух серверов Python общаться друг с другом, или процессор задач должен иметь веб-хуки или что-то еще?

Такое чувство, что должен быть благословенный способ сделать это ...

Ответы [ 3 ]

4 голосов
/ 20 апреля 2010

Посмотрите на брокеров сообщений, таких как ActiveMQ , RabbitMQ , ZeroMQ . Они предназначены для решения проблем, аналогичных тем, которые вы описали.

Я работаю над MMORPG в реальном времени с серверной частью, написанной на Python, и наши демоны в настоящее время ставят задачи друг перед другом, используя ActiveMQ с STOMP протоколом.

На низкоуровневых брокерах сообщений поддерживается сокетное соединение с потребителями, поэтому оно более эффективно, чем периодический опрос.

1 голос
/ 20 апреля 2010

SimpleXMLRPCServer.

Смотрите мой ответ здесь: Сетевое программирование на Python

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

0 голосов
/ 20 апреля 2010

Я склонен использовать опрос. Если таблица задач не такая большая, она не требует больших накладных расходов.

В противном случае вы можете реализовать веб-сервис или соединения типа сокетов.

Вы можете использовать SOAPpy, чтобы начать писать материал для веб-службы, или просто расширить BaseHTTPServer или что-то в этом роде, чтобы принимать сообщения (HTTP-запросы) от Django. Я чувствую, что это может быть больше программирования, чем оно того стоит, но, опять же, если задачи приходят нечасто, это может быть самым лучшим решением.

Я бы, однако, запустил свой мини-сервер домашнего строительства в какой-то защищенной среде; только Django должен иметь возможность выполнять там HTTP-запросы, поскольку создать безопасный веб-сервер нелегко.

EDIT

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

...