1 回答

TA貢獻1900條經驗 獲得超5個贊
“......新使用 ZeroMQ,所以我正在努力處理一些代碼?!?/em>
首先,歡迎來到零之禪的藝術。
如果您從未使用過 ZeroMQ,
您可能會喜歡先看看“ZeroMQ原則在不到五秒內”
,然后再深入了解更多細節
好吧,如果您從首先了解游戲規則開始,而不是從崩潰中學習,那么您的情況會好得多(是的,這與“想要傳福音的大師”向人群中注入的東西恰恰相反“只是編碼”就足夠了——它確實不是,因為它確實是一項嚴肅的業務)
這就是為什么:
如果您閱讀已發布的 API,如果您不了解系統的結構并且不了解其內部和外部行為(框架的游戲規則) ,大多數時候它仍然會讓您感到困惑:
該
ZMQ_LAST_ENDPOINT
選項應檢索綁定到 TCP 和 IPC 傳輸的最后一個端點。返回值將是 ZMQ DSN 形式的字符串。請注意,如果 TCP 主機是INADDR_ANY
,由 a 指示*
,則返回的地址將是0.0.0.0
(對于 IPv4)。
這說的是重點,但不知道這個概念,它仍然是隱藏的,你看不到它。
最好的下一步
如果你真的認真低延遲 分布式計算,最好的下一步,在閱讀上面的鏈接之后,停止編碼并首先花一些時間閱讀和理解美妙的 Pieter HINTJENS 的書“Code Connected, Volume 1”,這確實是進一步閱讀的必讀文章 -絕對值得你所有的時間和努力。
然后,您將看到為什么它永遠不會飛:
import zmq.asyncio; ctx = zmq.asyncio.Context()
rcv_socket = ctx.socket( zmq.PULL )
rcv_socket.connect( "ipc:///tmp/test" )
socket_path = rcv_socket.getsockopt( zmq.LAST_ENDPOINT )
rcv_socket.bind( "ipc://%s" % socket_path )
而這個可能(但string這里仍然沒有處理以 NULL 結尾的字符......這本身就是一個糟糕的軟件設計實踐和/或自律或兩者兼而有之的標志):
import zmq.asyncio; ctx = zmq.asyncio.Context()
rcv_socket = ctx.socket( zmq.PULL )
rcv_socket.bind( "ipc:///tmp/test" )
socket_path = rcv_socket.getsockopt( zmq.LAST_ENDPOINT )
rcv_socket.connect( "ipc://%s" % socket_path )
添加回答
舉報