問題タブ [remote-actors]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - リモート アクターを特定するにはどうすればよいですか?
別のリモート アクター (サーバー) に登録し、後で (シャットダウン フックを使用して) 登録を解除するリモート アクター (クライアント) があります。ただし、サーバーは登録解除を取得しますが、実際のsender
プロパティは別の Channel オブジェクトです。私のサーバーログには次のものがあります:
Registered new client [scala.actors.Channel@158e282]; supporting 1 clients
De-registered client [scala.actors.Channel@1caf0b6]; supporting 1 clients
これが最初に登録したのと同じクライアント アクターであることを (サーバー側で) どのように判断できますか? 明らかに、各クライアントに独自のUUID
ものを吹き込むことができますが、もっと簡単な方法があるのだろうか?
scala - もう存在しないクライアントに書き込もうとすると、リモート アクター フレームワークは何をしますか?
リモート アクター フレームワークを使用して複数のクライアントと通信するサーバーがあります。この質問で述べたように、クライアントがいつ姿を消したのかを追跡するのに苦労しています。したがって、私のサーバーはまだ存在しないクライアントにメッセージを送信しようとしています。
- これは問題ですか?(例外がスローされることはありませんが、サーバーの寿命が長い場合はメモリの問題があると思います)
- メッセージがリッスンしていないクライアントに送信されていることを検出するにはどうすればよいですか? (何らかの接続クリーンアップを実装したい場合)
scala - Scala はどのようにケース クラスに欠落している引数を "埋める" のですか?
私が電話するとき:
これはどのように次の構造に変換されますか:
特に、リモート (サーバー) アクターに渡されたリモート (クライアント) アクターからこれを呼び出すと、サーバーはプロパティがアクターでlink
あるインスタンスを受け取ることになります。Exit
from
基本的に、このリモート クライアント アクター オブジェクトのハンドルを取得する方法を理解したいと思います!
scala - scala リモート アクターの例外
i は、エコー サービス用にこのようなスカラ コードを使用します。
import scala.actors.Actor import scala.actors.Actor._ import scala.actors.remote.RemoteActor._
しかし、いくつかの例外があります。
どうやってそれを引き起こすのかわかりません。ちなみに、私のscalaバージョンは2.7.5です
scala - RemoteActorはアクターの登録を解除します
私はRemoteActorsで遊んでいます。RemoteActorをシャットダウンするとどうなるのだろうか。アクターは、RemoteActor.aliveおよびRemoteActor.registerで使用可能になりました。生きていると登録するという両方の逆を見つけることができません。
RemoteActorを適切にシャットダウンするにはどうすればよいですか?
アップデート
より明確にするために、私は「小さな」例を作成しました。次の2つのプログラムはどちらも終了せず、JVMは実行を継続します。ユーザーが作成したすべてのアクターとメインが終了します。
Aの出力は次のとおりです。
そしてBの場合:
デバッガーは、Aプログラムについて、次の4つの非デーモンスレッドがまだ稼働していると言います。
- PlainSocketImpl.socketAccept
- SocketInputStream.socketRead0
- ForkJoinScheduler.liftedTree1
- JavaVMを破棄します
scala - RemoteActor.select - 結果は決定論的ですか?
val delegate = RemoteActor.select() を呼び出すときに決定論があるのだろうか。ネット経由でデリゲートを送信しているときに、プログラムが終了しないことに気付いたので、これを尋ねています。
デリゲートに依存する他の副作用はありますか?
RemoteActor.select が同じ引数に対して同じデリゲートを返す場合、ルールはありますか?
以下は、RemoteActor.select の問題を示すサンプル コードです。
scala - Scalaリモートアクター-落とし穴
Scala RemoteActorコードを書いているときに、いくつかの落とし穴に気づきました。
- 「java.lang.ClassNotFoundException」を回避するには、RemoteActor.classLoader = getClass()。getClassLoader()を設定する必要があります
- リンクは、「リモートアクターのプロキシ(より具体的には、プロキシデリゲート)が送信する前に、リモートアクターをバックアップするNetKernel(リモートでメッセージを転送する機能)が閉じることができる競合状態のため、常に機能するとは限りません。ローカル出口をリモートで示すメッセージ。」(ステファン・トゥ)
- RemoteActor.selectは、常に同じデリゲートを返すとは限りません(RemoteActor.select-結果は決定論的ですか?)
- ネットワーク経由でデリゲートを送信すると、アプリケーションが正常に終了しなくなります(RemoteActorの登録解除アクター)
- RemoteActor.alive()およびRemoteActor.register()がactの外部で使用されている場合、リモートアクターは終了しません。(マグナスの答えを参照してください)
プログラマーが知っておくべき他の落とし穴はありますか?
serialization - Scala RemoteActors でクラスローダーの設定が必要なのはなぜですか?
Scala RemoteActors を使用すると、scala.actors.remote.NetKernel を参照する ClassNotFoundException が発生しました。他の人の例をコピーRemoteActor.classLoader = getClass.getClassLoader
して自分のアクターに追加したところ、すべてが機能するようになりました。なぜこれが必要なのですか?
scala - Scala Remote Actor クライアントを終了するには?
リモート アクターで遊んでいますが、いくつかの問題に直面しています。
次のサーバーを検討してください。
私は単純なクライアントを書きました:
予想どおり、サーバーは「Hey!」を出力します。
しかし、予期せず、クライアント アプリケーションが終了しません。
クライアント アプリケーションで多くのスレッドが開始されているように見えますが、メイン関数が終了した後も実行され続けます。
クライアント アプリケーションを終了するにはどうすればよいですか? さらに: クライアントが接続を開始および停止できるようにしたい場合はどうすればよいでしょうか? どうすればこれを達成できますか?
いくつかの追加情報 (返信に基づく): 私は scala 2.8.0.final を使用しています。ここで話しているのは、スタンドアロン サーバーとスタンドアロン クライアントです。と のように起動する必要が$ scala Server
あり$ scala Client
ます。私がしたいのは、アプリケーション「クライアント」が終了することですが、決して起こりません。
ありがとう!
serialization - ケースオブジェクトはシリアライズ可能で、ケースクラスはシリアライズできないのはなぜですか?
この例http://scala.sygneca.com/code/remoteactorsで遊んで、リモート アクターが Scala (2.8.0) でどのように機能するかを学びます。特に、アクターによって送信されるメッセージが次のように定義される方法を少し変更しました。
すべてが期待どおりに機能します。残念ながら、イベントをケース オブジェクトではなくケース クラスとして定義すると、次のようになります。
私の例は動作を停止します。より詳細には、ケース オブジェクトは直列化可能ですが、ケース クラスは直列化できないようです。実際、この最後の変更で例を実行しようとすると、次の例外が発生します。
ケース オブジェクトをシリアライズ可能にできるのに、ケース クラスをシリアライズできない理由はありますか? 私の例をケースクラスで動作させる方法はありますか?
編集:ビクターが提案し、アーロンが確認したように、クラスではなくメッセージとしてコンパニオンオブジェクトを送信しています。さらに、コンパイルされたコードを javap で調べると、クラスがシリアライズ可能であることが明らかです。
コンパニオン オブジェクトは次のとおりではありません。
問題は、コンパニオン オブジェクトの代わりにクラスを使用するように指定するにはどうすればよいかということです。次のように、アーロンが提案したようにメッセージを送信するときに、空の括弧も追加しました。
しかし、何も変更されていません。最後に、ケースクラスに偽のパラメーターも追加しました
次のようにメッセージを送信します。
しかし、まだ何の違いも経験していません。なにか提案を?