1

以下に、同じ結果を達成する 2 つの定義を示します。

  def sendTrigger(teamId:Long, data:String) {
    EngineSync.browserSockets.collect{ case ((i,(u,t)),s) => if(t==teamId) { s.send(data) } }
  }

  def sendTrigger(teamId:Long, data:String) {
    EngineSync.browserSockets.foreach{ case ((i,(u,t)),s) => if(t==teamId) { s.send(data) } }
  }

何が起こっているかというと、ソケットのリストをループし、それらをフィルタリングしてデータを送信しています。私は Scala の初心者なので、これがスケールし始めたときのパフォーマンスが心配です。私が理解していることforeachから、他の方法に比べてパフォーマンスが悪いのですcollectが、うまくいくかどうか、またはこれが完全に間違ったアプローチであるかどうかは誰にも分かりますか?

4

1 に答える 1

1

適切なサイズのコレクションをループすることと、ネットワーク IO を実行すること (少なくともブロックする場合) は、まったく異なるスケール操作であるため、このフェーズではパフォーマンスの問題について心配する必要はありません。

大規模なスケーリングでパフォーマンスを重視する場合:

  • 非同期ソケット IO に NIO を使用する
  • 内にソケット アクセス ロジックをまとめます(クライアントで s をActor使用してアクタを非表示にすることもできます)。Future
  • または、時間を割いてAkka の IOモジュールを使用することもできます
于 2012-09-13T07:18:23.953 に答える