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

3
我不确定这个问题是否适合在这里提问,因为它可能有点广泛。如果是这样,我很抱歉。无论如何,我计划开始一个Python项目,我正在尝试找出如何最好地实现它,或者它是否以任何实际的方式可行。该系统将由几个“节点”组成,它们实际上是Python脚本,用于将其他协议转换为与i/o相关的不同类型的硬件通信,控制继电器,测量输入,RFID读卡器等,以便与我的系统的常见协议进行通信。虽然我不是编程或网络专家,但我可以处理这部分内容,我有一个来自旧警报系统的模块,使用RS-485,我可以成功地控制和读取它。我想让这些节点通过网络相互通信,以便我可以将它们分布到不同的位置(目前在同一个子网中)。显然的方法是使用一个服务器,它们都连接到该服务器,以便可以轮询它们并获得指令翻转输出或执行其他操作。使用Twisted或类似工具应该不会太难。
但是,问题在于如果此服务器由于某种原因停止工作,则其他所有内容也会停止工作。我想要的是一种无服务器通信,除了网络本身之外没有单点故障。所有消息代理似乎都需要某种服务器,我真的找不到其他适合此项任务的工具。所有节点都必须知道所有其他节点的状态,因为我需要能够基于连接到其他节点的事物的状态来制作功能,例如,如果那个门已经打开,请不要打开这扇门。也许可以通过多播或广播来完成,但这似乎有点不安全,也不正确。我想到的一种方法是以某种方式指定一个节点接受其他节点的连接并充当消息路由器,并安排某种备份,以便如果此节点崩溃或消失,则另一个预定的节点接管,并且其他节点连接到它。这似乎很复杂,而且我不确定这是否比仅使用消息代理更好。
正如我所说,我不确定这是否是一个适当的问题,但如果有人能给我一些提示,告诉我如何做到这一点,或者是否有类似于此的东西,我可以学习一下。如果我做错了什么,请让我知道:)

你可以拥有一个主服务器和一个备份服务器。如果备份服务器检测到主服务器不工作,它将接管成为主服务器。同样,所有节点都知道备份服务器的存在或将被备份服务器告知“嘿,我是新服务器”或其他信息。看起来简单多了。 - Patashu
是的,那可能是一个不错的建议,而且也相当容易实现! - user2333489
2个回答

1

有些消息系统不需要中央消息代理。你可以先看看 ZeroMQ。


ZeroMQ 看起来真的很酷!这可能正是我正在寻找的东西。我会研究一下,感谢您的建议!如果没有更多的建议,我将把这个标记为正确答案。 - user2333489

1

我最终用Python制作了自己的无服务器消息系统。它还不完善,代码也很混乱,但它能够正常工作。它具有节点的自动发现、频道和主题的共享以及我需要的功能。如果有人有兴趣使用它或想要帮助,可以在这里找到:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接