Twitter-Finagle を使用してサーバーを作成します。サーバーの各 RPC 関数では、Finagle クライアントを使用して別のサーバーの RPC を呼び出すだけです。このような:
def rpc() = {
// finagleClient is created in a std way according to Finagle's Doc:
// val client = Thrift.newIface[Hello.FutureIface]("localhost:8080")
// http://twitter.github.io/finagle/guide/Protocols.html#thrift-and-scrooge
//
val f: Future[xx] = finagleClient.otherRpc()
f onSuccess { // do something }
f onFailure { // handle exception }
}
しかし、それほど長くはありませんが、エラーが発生します:
org.jboss.netty.channel.socket.nio.AbstractNioSelector: Failed to accept a connection
java.io.IOException: open too many files
そして、私は使用lsof -p
して、別のサーバーへの接続が多すぎることを発見しました (約 5000 接続!)。私はそれがどのように起こるのか知りたいですか?私が逃したものはありますか?
================ 問題解決 =============
plzはScalaを参照してください: mapValues がビューを生成する理由と、安定した代替手段があるのはなぜですか? 、Map の mapValue メソッドはトリッキーかもしれません
val resultIsAView = m.mapValue(mapFunction)
結果ビューが使用さmapFunction
れるたびに関数が再評価されます。resultIsAView