Python中的去中心化网络-如何实现?

15

我想编写一个Python脚本,用于检查用户本地网络上当前正在运行的脚本的其他实例。

就这个问题而言,假设我正在编写一个仅通过命令行运行的应用程序,并且当在本地网络上“找到”应用程序的另一个实例时,它将只更新屏幕。示例输出如下:

$ python question.py
Thanks for running ThisApp!  You are 192.168.1.101.
  Found 192.168.1.102 running this application.
  Found 192.168.1.104 running this application.

有哪些库或项目可用来帮助促进这样的事情?

4个回答

8

其中一种方法是,所需的应用程序正在广播UDP数据包,而您的应用程序从不同的节点接收该数据包,然后显示它。 Twisted Networking Framework 提供了执行此类工作的功能。文档还提供了一些简单的示例。


3
好的,您可以使用socket模块编写一些内容。但是需要有两个程序,一个在用户本地计算机上作为服务器,另一个客户端程序将与服务器进行交互。服务器还将使用select模块来监听多个连接。然后,当客户端程序运行时或者您想要发送数据时,它会向服务器发送一些内容。服务器可以打印出它维护的连接,包括IP地址等详细信息。
这在以下链接中得到了非常好的记录,比您需要的更详细,但它会像我一样向您解释:http://ilab.cs.byu.edu/python/

2

2
  • 你可以使用基于服务器的解决方案:建立一个中央服务器,客户端在此注册并查询其他已注册客户端。像Twisted这样的服务器框架可以提供帮助。
  • 在点对点设置中,可以使用推送技术,如UDP广播,每个客户端定期向网络发送心跳数据包,以供其他客户端接收。基本模块如socket可以帮助实现该功能。
  • 另一种方法是采用拉取方式,需要主动发现其他感兴趣的对等体。这可能是最不直接的方法。首先,您需要扫描网络,即找出哪些IP属于本地网络并逐个检查。然后您需要依次联系每个IP地址。如果程序打开了TCP端口,您可以尝试连接到其中一个IP地址,并查看您的程序是否正在运行。如果您希望程序完全无视这些查询,您可能需要打开到远程IP的ssh连接,并扫描进程列表以查找您的程序。所有这些都可能涉及各种模块和库。您可能想要查看的一个是execnet

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