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

2 投票
3 回答
1513 浏览
提问于 2025-04-15 21:49

我有两台服务器,一台是Django,另一台可能是用Python写的。一台服务器负责往数据库里放“任务”,另一台则是处理这些任务。

它们共享一个数据库,但我希望处理任务的服务器能快速响应新任务,而不是定时去检查。

有没有简单的方法让这两台Python服务器互相沟通,还是说处理任务的服务器必须使用网络钩子之类的东西?

我觉得应该有一种比较好的方法来实现这个...

3 个回答

0

我通常会使用轮询。如果任务表不大,这样做其实不会消耗太多资源。

另外,你也可以实现一个网络服务,或者使用套接字连接。

你可以用SOAPpy来开始写网络服务的东西,或者直接扩展BaseHTTPServer之类的东西,来接收来自Django的消息(HTTP请求)。我觉得这样可能编程上会有点复杂,但如果任务不常出现,这可能是最整洁的解决方案。

不过,我建议你把自己搭建的小服务器放在一个安全的环境里;只有Django可以在那儿发HTTP请求,因为搭建一个安全的网络服务器并不简单。

编辑

我刚想到Twisted。如果你决定不使用消息队列,这可能是你服务器的完美网络部分(一些Twisted的例子)。

1

简单的XMLRPC服务器。

你可以查看我在这里的回答:Python中的网络编程

你也可以使用定期轮询(如果有很多东西需要处理),但对于大多数工作来说,xmlrpcserver应该是足够的。

4

可以考虑使用一些消息中间件,比如 ActiveMQRabbitMQZeroMQ。这些工具是为了处理你提到的类似问题而设计的。

我正在开发一个实时的多人在线游戏,服务器部分是用Python写的,我们的程序之间现在是通过ActiveMQ和STOMP协议来排队任务的。

在底层,消息中间件会保持与消费者的连接,这样比起定期去询问要高效得多。

撰写回答