路由器挂在经销商路由器设置中 [英] Router Hanging in Dealer-Router Setup

查看:40
本文介绍了路由器挂在经销商路由器设置中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

鉴于以下尝试将 1 个 DEALER 连接到 1 个 ROUTER:

Given the following attempt to connect 1 DEALER to 1 ROUTER:

package net.async

import org.zeromq.ZMQ
import org.zeromq.ZMQ.Socket

import scala.annotation.tailrec

object Client {
  val Empty           = "".getBytes
  def message(x: Int) = s"HELLO_#$x".getBytes
  val Count   = 5
}

class Client(name: String) extends Runnable {

  import Client._
  import AsyncClientServer.Port

  override def run(): Unit = {
    val context = ZMQ.context(1)
    val dealer = context.socket(ZMQ.DEALER)
    dealer.setIdentity(name.getBytes)
    dealer.connect(s"tcp://localhost:$Port")
    runHelper(dealer, Count)
  }

  @tailrec
  private def runHelper(dealer: Socket, count: Int): Unit = {
    dealer.send(dealer.getIdentity, ZMQ.SNDMORE)
    dealer.send(Empty,              ZMQ.SNDMORE)
    dealer.send(message(count),     0)
    println(s"Dealer: ${dealer.getIdentity} received message: " + dealer.recv(0))
    runHelper(dealer, count - 1)
  }
}

object AsyncClientServer {

  val Port = 5555

  val context = ZMQ.context(1)
  val router = context.socket(ZMQ.ROUTER)

  def main(args: Array[String]): Unit = {
    router.bind(s"tcp://*:$Port")
    mainHelper()
    new Thread(new Client("Joe")).start()
  }

  private def mainHelper(): Unit = {
    println("Waiting to receive messages from Dealer.")
    val identity = router.recv(0)
    val empty    = router.recv(0)
    val message  = router.recv(0)

    println(s"Router received message, ${new String(message)} from sender: ${new String(identity)}.")
    mainHelper()
  }
}

我看到以下输出,挂在第二条消息上.

I see the following output, hanging on the second message.

[info] Running net.async.AsyncClientServer
[info] Waiting to receive messages from Dealer.

这是为什么?

推荐答案

不确定是否是您的问题的原因,但您不需要从经销商处发送身份帧,zeromq 会为您完成.通过添加它,您实际上发送了一条由 4 部分组成的消息.

Not sure if its the cause of your problem but you don't need to send the identity frame from your dealer, zeromq will do this for you. By adding it your actually sending a 4 part message.

IDENTITY
IDENTITY
EMPTY
CONTENT

这篇关于路由器挂在经销商路由器设置中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆