2011-05-01 39 views
13

我想编写一个Python脚本来检查用户本地网络是否有其他当前正在运行的脚本实例。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. 

有什么库/项目存在,以帮助促进这样的事情?

回答

7

一做,这将是下的问题是广播的UDP数据包的应用方式和应用程序正在接收来自不同节点那个,然后显示它。 Twisted Networking Framework为做这样的工作提供了设施。该文档也提供了一些简单的例子。

3

那么,你可以写一些使用socket模块。你必须有两个程序,一个是用户本地计算机上的服务器,然后是一个与服务器连接的客户端程序。服务器也将使用选择模块来侦听多个连接。然后,您可以拥有一个客户端程序,在运行时向服务器发送一些内容,或者随时随地向服务器发送内容。然后服务器可以打印出它正在维护的连接,包括诸如IP地址等详细信息。

在此链接中记录得非常好,比您需要的更多,但它会向您解释它,因为它对我有用。 http://ilab.cs.byu.edu/python/

2
  • 你可以有一个基于服务器的解决方案:其中客户自己注册一个中央服务器,查询被注册的其他用户。像Twisted这样的服务器框架可以在这里帮助。
  • 在对等设置中,推送可以使用像UDP广播这样的技术,其中每个客户端都经常在网络上发送心跳包,以供其他人接收。像套接字这样的基本模块将有助于此。
  • 另外,你可以去方法,其中有趣的同行需要主动发现其他人。这可能是最不直接的。首先,你需要扫描网络,即找出哪些IP属于本地网络并通过它们。然后,您需要依次联系每个IP。如果你的程序打开一个TCP端口,你可以尝试连接到这个,并找出你的程序在那里运行。如果您希望程序完全不了解这些查询,则可能需要打开与远程IP的ssh连接并扫描程序的进程列表。所有这些可能涉及各种模块和库。你可能要看的是execnet