python中网络节点之间的无服务器通信

时间:2013-05-09 01:29:16

标签: python networking

我不确定这个问题是否属于这里,因为它可能有点广泛。如果是的话,我道歉。无论如何,我打算在python中启动一个项目,我正在试图弄清楚如何最好地实现它,或者它是否有可能以任何实际的方式实现。该系统将由几个“节点”组成,这些节点基本上是python脚本,用于转换其他协议,用于与i / o相关的各种硬件进行通信,控制内容的中继,测量内容的输入,rfid读取器等,以及通用协议对于我的系统。我不是编程或网络专家,但这部分我可以处理,我有一个旧报警系统的模块,使用rs-485我可以成功控制和读取。我想让节点通过网络与对方交谈,这样我就可以将它们分发到不同的位置(现在在同一个子网上)。显而易见的方法是使用他们都连接的服务器,以便可以轮询它们并获得订单以翻转输出或执行其他操作。使用扭曲或类似的东西不应该太难。

这个问题是如果这个服务器出于某种原因停止工作,其他一切也都会停止工作。我想我想要的是某种无服务器通信,除了网络本身之外没有单点故障。消息代理似乎都需要某种服务器,我真的找不到任何其他适合这种情况的服务器。所有节点必须知道所有其他节点的状态,因为我需要能够根据连接到其他节点的事物的状态来创建功能,例如,如果门已经打开,请不要打开此门。也许这可以通过多播或广播来完成,但这看起来有点不安全而且不对。我想到的一种方法是以某种方式指定其中一个节点接受来自其他节点的连接并充当消息路由器并安排某种备份,以便如果此节点崩溃或消失,另一个预定节点接管并且其他节点连接到它。这看起来很复杂,我不确定这只是使用消息代理更好。

正如我所说的,我不确定这是一个合适的问题,但如果有人能给我一个暗示如何做到这一点,或者是否有什么东西可以做类似于我可以学习的东西。如果我正在愚蠢,请让我知道:)

2 个答案:

答案 0 :(得分:1)

有些消息传递系统不需要中央消息代理。您可以从查看ZeroMQ开始。

答案 1 :(得分:1)

我最终在python中创建了自己的无服务器消息传递系统。它没有准备好,代码是一团糟,但它的工作原理。它具有节点的自动发现,通道和主题的共享以及我需要的功能。如果有人有兴趣使用它或想要帮助,它就在这里:

https://bitbucket.org/ssspeq/connection-manager