2016-08-04 58 views
0

我正在嘗試使用NetMQ +控制套接字來實現帶有XPUB/XSUB模式的集線器(以控制集線器的行爲)。我使用代理,NetMqPoller,並希望使用控制套接字。但無論我嘗試 - 它都不起作用。這是我的代碼,爲什麼它不起作用的任何想法?NetMQ代理與XSub/Xpub模式中的控件套接字使用示例?

Using xpubSocket As New XPublisherSocket("@tcp://127.0.0.1:1234") 
     Using xsubSocket As New XSubscriberSocket("@tcp://127.0.0.1:5678") 
      Using plr As New NetMQPoller() 
       Using ctrlIn As New StreamSocket(">tcp://127.0.0.1:5678") 
        AddHandler ctrlIn.ReceiveReady, AddressOf ctrlIn_ReceiveReady 

        plr.Add(xpubSocket) 
        plr.Add(xsubSocket) 
        plr.Add(ctrlIn) 

        Dim proxy As New Proxy(xsubSocket, xpubSocket, ctrlIn, plr) 
        proxy.Start() 

        plr.Run() 
       End Using 
      End Using 
     End Using 
    End Using 

而且也有它運行每次ctrlIn插座的方法接收數據:

Sub ctrlIn_ReceiveReady(sender As Object, e As NetMQSocketEventArgs) 
    Dim bytes() As Byte 

    While (e.Socket.TryReceiveFrameBytes(bytes)) 
     Console.WriteLine("Received {0} bytes.", bytes.Length) 
    End While 
End Sub 

現在簡短說明:輪轂(XPUB/XSUB)完美地工作,也就是當我開始發佈商和一個用戶 - 我可以看到消息流動。但控制插座不工作,我得到的是在這兩個消息:

Received 5 bytes. 
Received 10 bytes. 

這之後 - 控制插座保持沉默,沒有更多的字節流過它。 有誰知道我錯在哪裏?或者,也許任何人都可以指出一個有效的例子?我一直在尋找一個例子,但無法找到任何與控制套接字工作。

回答

0

爲什麼類型Stream的控制套接字?另外,您應該在控制套接字的另一端有另一個套接字,現在您將Stream類型的控制套接字連接到發佈服務器,而流和發佈服務器則無法相互通信。

嘗試是這樣的(對不起,語法錯誤,而不是一個VB開發人員)

Using xpubSocket As New XPublisherSocket("@tcp://127.0.0.1:1234") 
    Using xsubSocket As New XSubscriberSocket("@tcp://127.0.0.1:5678") 
     Using plr As New NetMQPoller() 
      Using ctrlOut As New Dealer("@inproc://control") 
       Using ctrlIn As New Dealer(">inproc://control") 
        AddHandler ctrlIn.ReceiveReady, AddressOf ctrlIn_ReceiveReady 

        plr.Add(xpubSocket) 
        plr.Add(xsubSocket) 
        plr.Add(ctrlIn) 

        Dim proxy As New Proxy(xsubSocket, xpubSocket, ctrlOut, plr) 
        proxy.Start() 

        plr.Run() 
      End Using 
     End Using 
    End Using 
End Using