.net - NetMQ 代理与 XSub/Xpub 模式中的控制套接字使用示例?

标签 .net sockets publish-subscribe netmq

我正在尝试使用 NetMQ + 控制套接字(以控制集线器的行为)来实现具有 XPUB/XSUB 模式的集线器。我使用代理、NetMqPoller,并想使用控制套接字。但无论我尝试什么 - 它都不起作用。这是我的代码,有什么想法为什么它不起作用吗?

    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 socket 接收数据时运行:

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.

此后 - 控制套接字保持沉默,不再有字节流过它。 有谁知道我错在哪里?或者也许有人可以指出一个可行的例子?我一直在寻找一个例子,但找不到任何控制套接字工作的例子。

最佳答案

为什么控制套接字是Stream类型?另外,您应该在控制套接字的另一端有另一个套接字,现在您正在将 Stream 类型的控制套接字连接到 Publisher,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

关于.net - NetMQ 代理与 XSub/Xpub 模式中的控制套接字使用示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38766027/

相关文章:

C# 字典计算组值的总和

c# - tempDirectory编译配置

c# - 使用 Dapper 进行多映射查询

c# - TCP 监听器将消息剪切为 1024 字节

node.js - 可以为 redis 发布/订阅消息设置过期时间

c# - 使用数据库使用 asp.net 构建菜单

c - 套接字发送和接收缓冲区

sockets - 从 UDP 套接字读取应该使用多大的缓冲区?

java - 如何通过将两个 Flux 中的值配对到一个元组中来组合发布者?

mongodb - 令人惊讶的缓慢插入到 mongodb 上限集合