2016-12-30 87 views
0

我想通過命令NC連接到由ZeroMQ(IPC模型)創建Unix域套接字訪問。我可以連接,但是當我發送一些消息,然後,我的守護進程,這是聽了這個插座,是得到任何消息......ZeroMQ IPC Unix域套接字數控

我使用NC喜歡:

nc -U /path/to/socket 
+0

你通過NC發送什麼?它與zmq消息協議相匹配嗎? – David

+0

要添加到來自@David的評論,使用ZeroMQ的程序希望與另一個講述相同協議ZMTP的程序交談。最簡單的方法是使用另一個也使用ZeroMQ庫的程序。 netcat是不是。 ZeroMQ在諸如套接字,管道等流連接之上實現了一個消息隊列,所以不會期望看到你的消息數據從套接字中出現。無論你想要做什麼,幾乎可以肯定的是,ZMQ對於你選擇的語言來說是合適的綁定,甚至可能是bash。 – bazza

+0

@bazza請將此添加爲答案,我會接受 – user3025978

回答

1

很好,這是一個更長的版本。

ZeroMQ在流連接的頂部(如套接字,命名管道等)實現了一個消息隊列傳輸系統。爲此,它在流的頂部運行一個名爲ZMTP的協議,該協議提供所有消息分界,通信模式等等。它還必須處理協議錯誤,以提供一定的彈性。

比較到Web瀏覽器

這是同樣的想法,Web瀏覽器和Web服務器使用http通過套接字通信。 Http用於傳輸html文件。如果您查看通過套接字傳輸的數據,則會看到與運行http協議涉及的消息混合的html。而且由於http是一個基於文本的協議,它對人眼來說看起來還算不錯。

使用同一種語言

因此,當使用該ZMQ庫用於通信的程序連接的插座/命名管道/等等,它將被期待在由所定義的方式中的連接來交換數據ZMTP協議(與Web瀏覽器期望使用http與服務器通信的方式相同)。如果另一端的程序也使用zmq,那麼他們都在說同一個協議,並且一切都很好。

不兼容的協議

但是,如果連接的程序本身並不使用ZMTP協議,如網頁瀏覽器,併發送一個HTTP請求時,它不可能什麼意思。 zmq庫例程無疑會收到構成http請求的字節,試圖解釋它,不能理解它,並最終將其作爲垃圾拒絕。

同樣,如果使用了ZMQ庫的程序要發送消息,什麼都不會發生,除非底層ZMTP的協議驅動程序的內容,它與別的東西,說話ZMTP通信。如果有任何東西出現在netcap上,它將看起來不像你發送的消息(它將被ZMTP使用的字節混淆)。

相當於人類

相當於是一個英國人叫鮑勃拿起電話並撥號,他的英國朋友叫愛麗絲住在巴黎。但是,如果一個叫查理的法國人錯誤地接聽了電話(錯誤的號碼),他們將很難交換信息。與此同時,誰在竊聽電話線的伊芙正在嘲笑這兩個人失敗的溝通失敗。 (我對我們的英語人士講其他語言的能力差的情況進行了廣泛而部分合理的概括)。

前進道路

有一個ZMQ幾乎一切,甚至可能是bash的結合使用。不管你想要達到什麼目的,在爲你使用的編程語言或腳本語言獲得體面的ZMQ綁定或者使用它來提供適當的ZMQ端點時,它可能都是值得的。

+0

您是否願意好好擴展您的個人資料中的「噩夢」部分 - 您在InMOS Transputer時代能夠記住的內容?特別感興趣的是,對完全硬件支持的「PAR」occam表示偏好(「恰好」,「SEQ」)C語言的基礎是什麼?**謝謝。 – user3666197

+0

調試是一個真正的噩夢。除了在連接到主機PC的網絡中的一臺Transputer之外,您甚至無法進行printf調試。偉大的硬件,偉大的語言(我用他們的C,而不是奧卡姆),非常努力和緩慢的發展,一旦運行良好,非常令人滿意。一旦Intel達到66MHz,Inmos就註定要失敗。您可以從一個可以從大型Transputers網絡獲得的Intel x86上的單個線程獲得相同的性能。另外,他們遲到了T9000。 – bazza

+0

但是,語言和硬件的並行性非常好。如果我實現我自己的CSP框架,我仍然會調用主要的例程procAlt()。我想這就是Inmos C的Occam的PAR。快樂,但艱難的日子。奇怪的是,Inmos的一些硅片偶然很難被使用,所以它被用在像喬託這樣的一些航天器上(如果我的記憶是正確的) – bazza