2011-03-16 17 views
2

少し問題があります。現在のプロジェクトのクライアントとサーバー間の通信を、リモートのScalaアクターからリモートのAkkaアクターに移しました。アクラアクタは、Scala Actorができるリモートサーバに接続できません

私のローカルマシンでテストしている間はすべて正常に動作しましたが、別のマシンでクライアントとサーバーでコードを実行しようとすると、クライアントはサーバーにもう到達できなくなりました(私はjava.nio.channels.NotYetConnectedExceptionとなります)。私はダブルとトリプルが使用されているIPとポートをチェックしました。これは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であるかどうかを全く確信してませんが、私はアッカ分布からScalaの-library.jarを使用) アッカ1.0

私はあなたができることを知っています私のコードをデバッグすることはできませんが、ここで間違っているかもしれない何らかのヒントやアイデアに対して非常に感謝しています。

P .:例外は、Pingを送信しようとした後にスプリット秒以内にスローされます。だから私はタイムアウト時間を増やすことを気にしなかった。

答えて

4

免責事項:私はアッカ

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

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

これは役に立ちますか?

+1

こんにちはヴィクトール、ありがとうございます。どちらの 'remote.start()'を意味しますか?サーバーでは、 "localhost"と "127.0.0.1"と外部IPを試しました。クライアントでは、実際には "localhost"を使用します。しようとします。バージョン1.1を使用する場合:それはかなり安定していますか?残念ながら私はクライアントに新しいコードを送ることができるのは初めてだから、金曜日のフィードバックだけを提供することができます。 – Agl

+0

私はそれが逆引き参照を試みることを期待していました。 私はあなたが1.1-SNAPSHOTを試してみる方が良いと思っています.1週間か2週間でRC1をリリースするので、ほぼ「そこに」あります。 –

+0

ビクターに感謝します。あなたのウェブサイトに記載されているように1.1(原点マスター)をコンパイルしようとしましたが失敗しました(scala 2.7と2.8の問題があるようです)。私のクライアントは昨日彼の製品を欲しかった(文字通り)。だから私は待機が選択肢ではないことを恐れている。私は通常のスカラー俳優にダウングレードしなければならないだろうと思う。しかし、私はクライアントが最初に変更を希望している間に再びアップグレードしようとします。悲しい。しかし、あなたの助けに感謝します。 – Agl

関連する問題