代码之家  ›  专栏  ›  技术社区  ›  kakyo

我可以将ZeroMQ TCP/UDP服务器与常规BSD TCP/UDP套接字客户端混合使用吗?

  •  0
  • kakyo  · 技术社区  · 5 年前

    我可以启动ZeroMQ TCP/UDP服务器并使用常规BSD TCP/UDP套接字客户端与之通信吗?

    我有几台机器在相互交谈,有些机器依赖于带有低级套接字客户端的库,否则很难迁移到ZMQ。

    0 回复  |  直到 5 年前
        1
  •  1
  •   user3666197    5 年前

    Q : “我可以启动ZeroMQ TCP/UDP服务器并使用常规BSD TCP/UDP套接字客户端与之通信吗?”

    A: 是的,但是。。。

    没有比这更好的了 a“ TCP/UDP服务器 “在ZeroMQ中。ZeroMQ使用高级行为原型 { PUSH/PULL | PUB/SUB | REQ/REP | ... | PAIR/PAIR } ,可以选择一个或多个(是的,a) PUB 发件人可能会将邮件发送给所有人 vmci:// ipc:// pgm:// tcp:// SUB -同一“插座”上的代理(一次原型) transport-classes 正是因为这个事实 transport-class 数据泵是一个隐藏但“专业化”的组件,用于处理所有隐藏的、低级的细节——每个细节都有点不同,用于服务于每个特定的应用程序 运输类 根据个人数据泵的需要 运输类 -具体细节:
    { inproc:// | ipc:// | tipc:// | tcp:// | pgm:// | epgm:// | norm:// | vmci:// } .


    然而,有一个“特殊的” Socket -可以与非ZeroMQ交易对手“对话”的原型,因此可以满足您的需求:

    ZMQ_流

    铅字插座 ZMQ_STREAM 用于在使用 tcp:// 运输A. ZMQ_流 套接字可以充当客户端和/或服务器,异步发送和/或接收TCP数据。

    接收TCP数据时 ZMQ_流 套接字应在包含路由的消息部分前面加上前缀 id 在将消息传递给应用程序之前,原始对等方的。从所有连接的对等方中公平地排队接收消息。

    发送TCP数据时 ZMQ_流 套接字应移除消息的第一部分,并使用它来确定路由 身份证件 消息应路由至对等方,不可中断的消息应导致 EHOSTUNREACH EAGAIN 错误

    要打开与服务器的连接,请使用 zmq_connect 调用,然后获取套接字路由 身份证件 使用 zmq_getsockopt() 打电话给 ZMQ_ROUTING_ID 选项

    要关闭特定连接,请发送路由id帧,然后发送长度为零的消息。

    当建立连接时,应用程序将收到一条长度为零的消息。类似地,当对等方断开连接(或连接丢失)时,应用程序将收到一条长度为零的消息。

    必须先发送一个路由id帧,然后再发送一个数据帧。这个 ZMQ_SNDMORE 路由需要标记 身份证件 但在数据帧上被忽略。

    只需注意传入方向上所有ZMQ_流连接对等方的公平队列处理。

        2
  •  0
  •   Arnaud Loonstra    4 年前

    如今,ZeroMQ也支持DGRAM。请看这里: zmq_udp.txt .所以除了常规TCP,还有常规UDP。

    推荐文章