2016-08-04 1 views
0

허브 동작을 제어하기 위해 NetMQ + 제어 소켓이있는 XPUB/XSUB 패턴이있는 허브를 구현하려고합니다. 나는 프록시, NetMqPoller를 사용하고 제어 소켓을 사용하고 싶다. 그러나 무엇을 시도해도 작동하지 않습니다. 여기 내 코드, 어떤 아이디어가 작동하지 않는 이유는 무엇입니까?XSub/Xpub 패턴의 컨트롤 소켓 사용 예가있는 NetMQ 프록시?

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는) 내가 게시자를 시작하고 때 즉, 완벽하게 작동 subscriber - 메시지가 흐르는 것을 볼 수 있습니다. 제어 소켓 침묵을 유지, 더 이상 바이트 그것을 통해 흐름 -

Received 5 bytes. 
Received 10 bytes. 

그리고 그 후

이 :하지만 제어 소켓이 작동하지 않습니다, 내가 얻을 모두가에서 두 개의 메시지입니다. 누구가 잘못 알 수 있습니까? 아니면 누구든지 실제 예제를 가리킬 수 있습니까? 예를 찾고 있었지만 컨트롤 소켓이 작동하는 anythig를 찾을 수 없었습니다.

답변

0

왜 스트림 유형의 컨트롤 소켓입니까? 또한 컨트롤 소켓의 다른 끝에 다른 소켓이 있어야합니다. 이제 Stream 유형의 컨트롤 소켓을 게시자에 연결하면 Stream과 Publisher는 서로 이야기 할 수 없습니다.

이 같은 시도 (구문 오류에 대한 미안 아닌 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