在两个Python服务器之间发送消息

时间:2010-04-20 10:50:23

标签: python django ipc message-queue

我有两个服务器 - 一个是Django,另一个可能是用Python编写的 - 一个是将'tasks'放入数据库,另一个是处理这些任务。

他们共享一个数据库,但我希望处理器能够快速响应新任务而不是定期轮询。

两个Python服务器之间是否有任何直接的方式可以相互通信,或者任务处理器是否必须有Web挂钩或其他东西?

感觉应该有一种幸福的方式来做到这一点......

3 个答案:

答案 0 :(得分:4)

关注ActiveMQRabbitMQZeroMQ等消息代理。它们旨在解决类似于您所描述的问题。

我正在研究使用Python编写的服务器部分的实时MMORPG,我们的守护进程当前使用带有STOMP协议的ActiveMQ将任务排队。

在低级消息代理上保持与消费者的套接字连接,因此它比定期轮询更有效。

答案 1 :(得分:1)

SimpleXMLRPCServer。

请在此处查看我的回答:Network programming in Python

你也可以使用定期轮询(如果东西有很多东西),但xmlrpcserver应该可以用于大部分工作。

答案 2 :(得分:0)

我倾向于使用民意调查。如果任务表不是那么大,那么实际上并没有那么多开销。

否则,您可以实现Web服务或套接字类型连接。

您可以使用SOAPpy开始编写Web服务,或者只是扩展BaseHTTPServer或类似的东西来接受来自Django的消息(HTTP请求)。我觉得这可能是编程而不是它的价值,但话说再来一次,如果任务很少发生,那么它可能是最好的解决方案。

然而,我会在一些受保护的环境中运行我的自制迷你服务器;只有Django能够在那里做HTTP请求,因为构建一个安全的Web服务器并不容易。

修改

我刚考虑Twisted。如果您决定不使用消息队列(some twisted examples)

,这可能是服务器的完美网络部分