2016-08-04 6 views
0

NetMQ +制御ソケット(ハブの動作を制御する)を持つXPUB/XSUBパターンのハブを実装しようとしています。私は、プロキシ、NetMqPollerを使用し、コントロールソケットを使いたい。しかし、私が何をしようと - それは動作しません。ここで私のコードは、それが動作しない理由は何ですか?XSub/Xpubパターンでコントロールソケットの使用例があるNetMQ Proxy?

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 - 私は流れるメッセージを見ることができます。しかし、制御ソケットは、私が得るすべてはそれに2つのメッセージで、動作しません:

Received 5 bytes. 
Received 10 bytes. 

その後 - 制御ソケットは、サイレントのまま、これ以上のバイトは流れません。 誰かが間違っていると知っていますか?あるいは、誰かが実用的な例を指すことができますか?私は例を探していましたが、制御ソケットを使ってanythigを見つけることができませんでした。

答えて

0

なぜストリームタイプのコントロールソケットですか?また、制御ソケットのもう一方の端に別のソケットが必要です。今は、ストリームタイプのコントロールソケットをパブリッシャに接続しています。ストリームとパブリッシャは互いに通信できません。

(構文エラーではなく、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 
をお試しください
関連する問題