2011-05-01 20 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