0

我有一个小型 Rep 服务器,我可以使用以下代码成功向它发送消息:

import akka.actor.Actor
import akka.zeromq._
import org.zeromq.ZMQ
import akka.util.ByteString

class Sender extends Actor {

  override def preStart(): Unit = {
    val context = ZMQ.context(1)
    val socket = context.socket(ZMQ.REQ)
    socket.connect ("tcp://127.0.0.1:1234")
    socket.send("test".getBytes(), 0)
    println("Sent!")
    //val reqSocket =     ZeroMQExtension(context.system).newReqSocket(
    //                        Array(Connect("tcp://127.0.0.1:1234")))
    //reqSocket ! ZMQMessage(ByteString("test"))
  }

  def receive : Receive = {
    case _ =>
  }
}

但是,如果我改用注释掉的部分(并注释掉 def 中的所有其他内容),那么服务器将无法检测到任何消息。我应该在使用时使用其他类型的程序来发送消息ZeroMQExtension吗?我正在使用 ZeroMQ 2.2.0 版。

作为参考,这里是服务器代码:

import akka.actor._
import akka.zeromq._

class ReplyActor extends Actor {
  def receive = {
    case _ =>
      println("Received something!")
  }
}

object Replyer extends App {
   val system = ActorSystem("zmq")
   val serverSocket = ZeroMQExtension(system).newRepSocket(
   Array(Bind("tcp://127.0.0.1:1234"),
         Listener(system.actorOf(Props[ReplyActor]))))
}
4

1 回答 1

1

在您的服务器中,将 case _ => 代码切换为以下内容:

case x => println("msg 是:" + x)

然后您会发现您的ReplyActor 和您的发件人最终会收到一条“正在连接”的消息。我发现在收到此“正在连接”消息之前,您无法发送/接收任何内容。这只是意味着您实际上已连接。一旦你明白了,你就可以开始发送/接收消息了。

于 2013-10-09T13:47:33.990 回答