The dealer (server) for the dealer (employee) is not working

In the next DEALER to DEALER connection, the DEALER worker sends [][Foo!] , That is, a two-frame message, to the DEALER Server.

 package net.async import org.zeromq.ZMQ import org.zeromq.ZMQ.Socket class Worker(name: String) extends Runnable { import DealerToDealer._ val WorkerResponse = "Foo!".getBytes val id = name.getBytes override def run(): Unit = { val context = ZMQ.context(1) val worker = context.socket(ZMQ.DEALER) worker.setIdentity(id) worker.connect(s"tcp://localhost:$Port") runHelper(worker) } private def runHelper(worker: Socket): Unit = { println(s"Worker ${name}: sending Empty + ${show(WorkerResponse)}.") worker.send(Empty, ZMQ.SNDMORE) worker.send(WorkerResponse, 0) println(s"Worker ${name}: sent") val message = show(worker.recv(0)) println(s"Worker ${show(worker.getIdentity)}: received message: $message.") runHelper(worker) } } object DealerToDealer { def show(xs: Array[Byte]): String = new String(xs) val Port = 5555 val Empty = "".getBytes val WorkerMessage = "Bar!".getBytes val WorkLimit = 25 def main(xs: Array[String]): Unit = { val context = ZMQ.context(1) val server = context.socket(ZMQ.DEALER) new Thread(new Worker("Bob")).run() server.bind(s"tcp://*:$Port") runHelper(server, 0) } private def runHelper(server: Socket, sent: Int): Unit = { if (sent > WorkLimit ) { println(s"SERVER: sent the '$WorkerMessage' message ${WorkLimit} times. shutting down.") sys.exit(0) } else { println(s"SERVER: sending Empty + ${show(WorkerMessage)}.") server.send(Empty, ZMQ.SNDMORE) server.send(WorkerMessage, 0) println(s"SERVER: sent") val message = server.recv(0) println(s"SERVER: received message: ${show(message)}.") runHelper(server, sent + 1) } } } 

However, when it starts, only print operators show the Worker message sending. Actual receipt of the server is not displayed

 [info] Running net.async.DealerToDealer [info] Worker Bob: sending Empty + Foo!. [info] Worker Bob: sent 

Why is the message Server not receiving the message?

Also, is the [][Message] format for a DEALER message - DEALER ?

+6
source share
1 answer

Yes, the format [] [message] is correct, but remember that you need to read (all up to) an empty frame, and then your message.

+1
source

All Articles