2

静的 IP アドレスとポートに共通のサーバーを持つアクター システムを構築したいと考えています。サーバーのアドレスを知っている多くのクライアントが存在します。サーバーはクライアントの IP アドレスを知りません。

サーバーの構成:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "46.38.232.161"
      port = 2552
    }
  }
}

クライアントの構成:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      port = 2553
    }
  }
}

クライアントは、インターネット全体から来る場合があります。ここで、クライアントのアクターからサーバーのアクターにメッセージを送信したいと考えています。サーバーは、メッセージをどこに送り返すかをどのように知るのでしょうか? サーバーに sを送信するActorPathと、対応するクライアントのアドレスがわかるようになりますが、これらにはクライアントの IP アドレスが含まれていません。

4

2 に答える 2

1

akka.remote.netty.hostnameapplication.confネットワークを介して通信する場合は、プロパティを内部で到達可能なIPアドレスまたは解決可能な名前に設定できます。実際、Akkaを使用する場合、「クライアント」ノードはサーバーにもなります。

アプリの起動時にアドレスが不明な場合は、Akkaのドキュメントにある次のコードフラグメントを検討してください。

import akka.actor.ActorSystem
import com.typesafe.config.ConfigFactory

val customConf = ConfigFactory.parseString("""
  akka.actor.deployment {
    /my-service {
      router = round-robin
      nr-of-instances = 3
    }
  }
""")

// ConfigFactory.load sandwiches customConfig between default reference
// config and default overrides, and then resolves it.
val system = ActorSystem("MySystem", ConfigFactory.load(customConf))
于 2012-11-24T19:39:14.557 に答える
1

Actorには、現在のメッセージを送信したアクター ( ) への参照を取得するためにアクターのメソッドで呼び出すsenderことができるメソッドがあります。には、アクターが住んでいるのホストとポートを含む があります。receiveActorRefActorRefActorPathRootActorPathAddressActorSystem

于 2012-11-23T01:04:22.887 に答える