2

少し問題が発生しました。現在のプロジェクトのクライアント サーバー通信をリモート Scala アクターからリモート Akka アクターに移動しました。

ローカル マシンでのテスト中はすべて正常に動作しましたが、別のマシンでクライアントとサーバーを使用してコードを実行しようとすると、クライアントはサーバーに到達できなくなります ( java.nio.channels.NotYetConnectedException. 使用されているIPとポートを2倍と3倍にチェックしました。これは、私が Scala アクターのコードで使用したのと同じホスト データです (ちなみに、これはまだ機能しています。そのため、ファイアウォールの設定で何も変更されておらず、サーバーは技術的に到達可能です)。

コードの重要な部分は次のとおりです (主に akkas のホームページからコピーして貼り付けました)。

サーバーアクターで

import akka.actor.Actor._
import akka.actor.{Actor, ActorRef, Supervisor}

override def preStart = {

  // I also tried the servers external ip here 
  remote.start(host, 1357) 

  // SERVER_SERVICE_NAME is a string constant in a trait that both server
  // and client extend
  // all actual work is refered to SessionActor
  remote.registerPerSession(SERVER_SERVICE_NAME, actorOf[SessionActor])
}

そしてクライアント上で:

import akka.actor.Actor._
import akka.actor.{Actor, ActorRef, Supervisor}

override def preStart = {

  // CLIENT_SERVICE_NAME is a string constant
  Actor.remote.start("localhost", 5678).register(CLIENT_SERVICE_NAME, self)

  // I also tried "Thread sleep 1000" here just in case

  // internalServer is a private var of the type Option[ActorRef]
  // host and serverPort are actually read from a propertiesfile. Guess this
  // doesn't matter. I checked them.
  internalServer = Some(
    remote.actorFor(SERVER_SERVICE_NAME, host, serverPort)
  )

  // Again I tried "Thread sleep 1000" here. Didn't help neither

  internalServer foreach (server => {
    (server !! Ping) foreach (_ match { // !!! this is where the exception is thrown !!!
        case Pong   => println("connected")
        case _      => println("something's fishy")
      })
    })

}

Scala 2.8.1 (クライアントのマシンが 2.8 か 2.8.1 かはわかりませんが、akka ディストリビューションの scala-library.jar を使用しています) Akka 1.0

私のコードを彼女にデバッグできないことは知っていますが、ここで何がうまくいかないのか、どんな種類のヒントやアイデアにも非常に感謝しています.

PS: を送信しようとした後、一瞬のうちに例外がスローされますPing。そのため、タイムアウト時間を増やす必要はありませんでした。

4

1 に答える 1

4

免責事項: 私は Akka の PO です

remote.start() でホスト名の代わりに生の IP アドレスを使用してみてください。それで解決しない場合は、2 つのオプションがあります。

  1. 2 つの当事者が互いに DNS 解決できることを確認する
  2. 名前解決を避けるためにかなりの数の変更を加えたため、現在のマスター (1.1-SNAPSHOT) にアップグレードします。

それは役に立ちますか?

于 2011-03-16T15:13:21.940 に答える