Python 在实现发布-订阅模式时,Django和Twisted之间如何通信?

Python 在实现发布-订阅模式时,Django和Twisted之间如何通信?,python,django,websocket,twisted,publish-subscribe,Python,Django,Websocket,Twisted,Publish Subscribe,我正在使用Python和Autobahn(基于Twisted构建的东西)实现一个WebSocket服务器。让我的Autobahn/Twisted服务器知道Django应用程序中发生了什么事情的最佳方法是什么 更具体地说,我正在实现一个通知服务和即时更新服务,它可以自动让客户端应用程序知道什么时候发生了变化以及需要更新什么 有没有办法让Django“发布”到我的Twisted服务器,然后更新客户端?我真的不确定这一切应该是什么样子 谢谢有几十种或数百种方法可以进行进程间通信。例如,可以通过在一个进

我正在使用Python和Autobahn(基于Twisted构建的东西)实现一个WebSocket服务器。让我的Autobahn/Twisted服务器知道Django应用程序中发生了什么事情的最佳方法是什么

更具体地说,我正在实现一个通知服务和即时更新服务,它可以自动让客户端应用程序知道什么时候发生了变化以及需要更新什么

有没有办法让Django“发布”到我的Twisted服务器,然后更新客户端?我真的不确定这一切应该是什么样子


谢谢

有几十种或数百种方法可以进行进程间通信。例如,可以通过在一个进程中运行HTTP服务器,在另一个进程中使用HTTP客户端来使用HTTP


协议的具体选择可能并不重要。您需要的通信类型的特定细节可能会建议使用一种协议而不是其他协议。如果您的需求范围只是提供“发生了某些事情”的通知,那么一个非常简单的协议可能会很好地完成这项工作。

您看过autobahn.js库吗?您可以直接从浏览器连接到WebCoket后端。不仅可以调用高速公路RPC API,还可以执行发布/订阅


制作一个支持RPC端点的高速公路服务器,基本答案是pubsub。当客户端连接时,服务器发送它可以访问的RPC端点,然后客户端可以随意调用它们,客户端还可以订阅通道,服务器可以调用发布API将消息推送到任何订阅的客户端。不确定您是否见过它,但有许多不同配置的示例github.com/tavendo/AutobahnPython/tree/master/examples/twisted/…–

这些片段如何相互关联?您是否正在Twisted的WSGI容器中运行Django(如果不是,为什么不是)?它们是独立的过程吗?它们是否在同一台主机上运行?它们是独立的进程。现在唯一与它们相关的是,它们都使用models.py检查同一个数据库的更新。您可能会重新考虑在Twisted的WSGI容器下运行Django。如果您这样做,那么通过Autobahn从Django(然后在后台工作线程池上运行)发布就像
callFromThread
到Autobahn(在主线程上运行)一样简单,Autobahn随后执行发布。以下是基本位(易于扩展以使用Autobahn):那么在Twisted或Django中会是什么样子?我想让Twisted服务器发送几个不同的更新,它们都取决于连接的客户端。我只想发送相关的更新。流程是这样的:Django中发生了一些事情->twisted服务器以某种方式获取了这些信息(这就是您的答案所在)->客户端接收更新并执行一些操作。例如,您可以在twisted中运行web服务器(实例化
twisted.web.server.Site
),然后用Django的客户端点击它(使用
urllib
urllib2
urllib3
请求
,或Python中数十个其他HTTP客户端库中的任意一个)。我的问题提到了高速公路。我想要的是更具体一点。制作一个支持RPC端点的高速公路服务器,基本答案是pubsub。当客户端连接时,服务器发送它可以访问的RPC端点,然后客户端可以随意调用它们,客户端也可以订阅一个通道,然后服务器可以调用它们发布API,用于将消息推送到任何订阅的客户端。不确定您是否见过它,但有许多不同配置的示例非常有用!请将其添加到您的答案中,然后我将接受它。