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 _ =>
  }
}

ただし、代わりにコメント アウトされた部分を使用すると (そして定義内の他のすべてをコメント アウトすると)、サーバーはメッセージを検出できません。を使用する場合、メッセージを送信するために他の種類の手順を使用することになっています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 is: " + x)

次に、ReplyActor と Sender が「接続中」メッセージを受け取ることになります。この「接続中」メッセージが表示されるまで、何も送受信できないことがわかりました。それはあなたが実際に接続されていることを意味します。それを取得したら、メッセージの送受信を開始できます。

于 2013-10-09T13:47:33.990 に答える