0
我有一個回覆ZSocket的請求 - 回覆模式。我可以重新綁定一個ZeroMQ套接字到另一個端口而不破壞套接字嗎?
在後面的過程中,我想切換綁定,因此回覆套接字現在響應不同端口上的請求。如果用戶不想在默認端口5555上收聽,則用戶輸入他們想要收聽的端口。
我可以通過再次調用ZSocket.Bind()來做到這一點,還是必須銷燬首先插座對象。
如果我必須先摧毀它,那麼我怎麼能確定ZSocket已經準備好被反彈到別的東西呢?我知道關閉套接字在C中處理方式不同,因爲它沒有垃圾收集。由於ZeroMQ的C#語言綁定可以使用垃圾收集,就像關閉套接字並在另一個端口上創建一個新套接字一樣簡單?我是否需要費心設置一個低靈兒值或類似的東西?
我在文檔中找不到任何關於此的信息。 這裏有一個相關的問題ZeroMQ: Address in use error when re-binding socket
這裏是代碼我有
private ZContext context = new ZContext();
private ZSocket replier = new ZSocket(context, ZSocketType.REP);
replier.Bind("tcp://*:5555); //bind to default port
//yada yada...
//user enters new port to listen on 5556
replier.Bind("tcp://*:5556);
什麼是做到這一點的正確方法?請解釋答案背後的邏輯。
好的,謝謝。我讀過,你必須設置低點並關閉插槽,然後才能在C中釋放,以便安全關閉。不知道這是否適用於重新綁定到另一個端口。我將嘗試一個簡單的重新綁定來查看它是否可以工作 – ComradeJoecool
只需在另一個端口上再次調用Bind()將允許我開始在該新端口上接收消息,但舊端口不能被其他端口綁定。 – ComradeJoecool
這是因爲一個zmq套接字可以綁定到多個網絡套接字,所以第二個綁定調用會添加一個額外的tcp連接,而不是替換現有的連接。 – David