2013-05-09 64 views
3

我不確定這個問題是否屬於這裏,因爲它可能有點廣泛。如果是這樣,我表示歉意。無論如何,我打算在python中開始一個項目,我試圖找出如何最好地實現它,或者如果它甚至可能以任何實際的方式。該系統將由幾個「節點」組成,這些節點基本上是Python腳本,用於轉換其他協議,以便與與I/O相關的各種硬件進行通信,將中繼控制內容,測量輸入以及rfid讀取器等轉換爲通用協議爲我的系統。我不是編程或網絡專家,但是我可以處理這個部分,我有一個使用rs-485的舊報警系統的模塊,我可以成功控制和閱讀。我想讓節點通過網絡與對方通話,以便我可以將它們分發到不同的位置(現在在同一個子網上)。顯而易見的方法是使用他們都連接到的服務器,以便他們可以被輪詢並獲得命令來翻轉輸出或做其他事情。使用扭曲或類似的東西,這不應該太難。Python中的網絡節點之間的無服務器通信

與此問題是,如果此服務器出於某種原因停止工作,一切都會做。我想我想要的是某種無服務器通信,除了網絡本身之外沒有單點故障。消息中間商似乎都需要某種服務器,而我無法真正找到其他任何似乎適合於此的東西。所有節點都必須知道所有其他節點的狀態,因爲我需要根據連接到其他節點的狀態來製作功能,例如,如果門已經打開,請勿打開此門。也許這可以通過多播或廣播完成,但這似乎有點不安全,並且不正確。我想到的一種方式可能是以某種方式指定一個節點接受來自其他節點的連接,並充當消息路由器並安排某種備份,以便如果此節點崩潰或消失,則另一個預定節點接管其他節點連接到它。這看起來很複雜,我不確定這比使用消息代理更好。

正如我所說,我不確定這是一個合適的問題,但如果任何人都可以給我一個提示,說明如何做到這一點,或者有什麼事情做了類似的事情,我可以學習。如果我是愚蠢的,請讓我知道:)

+0

你可以有一個主服務器和備份服務器。如果備份服務器檢測到主服務器不能正常工作,它將接管主服務器。同樣,所有節點都知道備份服務器的存在,或者將由備份服務器告知'嘿,我是新服務器'或其他。似乎很簡單。 – Patashu 2013-05-09 01:38:43

+0

是的,這可能是一個很好的建議,也是一個相當簡單的建議! – user2333489 2013-05-09 21:09:53

回答

1

有消息傳遞系統,不需要中央消息代理。您可以先看看ZeroMQ。

+0

ZeroMQ看起來非常酷!這可能就是我正在尋找的東西。我會研究這個,謝謝你的建議!如果沒有更多的建議,我會將其標記爲正確答案。 – user2333489 2013-05-09 21:15:30

1

我最終在python中創建了我自己的無服務器消息傳遞系統。它還沒有準備好,代碼是一團糟,但它的工作原理。它具有自動發現節點,共享頻道和主題,以及我需要的功能。如果有人有興趣使用它或想幫助,它是在這裏:

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