5

1つのソケット接続を回避するにはどうすればよいのでしょうか。Scalaのスレッド。私はそれについて多くのことを考えました、しかし私はいつも各クライアント接続のために入ってくるデータをリッスンするいくつかのコードに行き着きます。

問題は、おそらく数千の接続を同時に処理するアプリケーションを開発したいということです。ただし、スケーラビリティとコンテキストスイッチングが不足しているため、もちろん、接続ごとにスレッドを作成する必要はありません。

これを行うための「正しい」方法は何でしょうか。私の世界では、アクターごとに1つのスレッドをブロックする必要なしに、接続ごとに1つのアクターを持つことができるはずです。

4

2 に答える 2

5

「ProgrammingScala」という本の中で、著者はnaggatiと呼ばれるライブラリを使用しました。これは、NIOとアクターを組み合わせたフレームワークを提供します。http://programming-scala.labs.oreilly.com/ch09.html

于 2010-03-24T17:21:15.373 に答える
4

アクターと非ブロッキングソケット(つまりNIO)を混在させるアプリケーションがあります。私がこれを行った方法は、専用のIOスレッドを使用することです。このスレッドは、reactorパターンを使用してアクターにメッセージを送信します(Javaシステムのスレッドプールに作業を委任するのとほぼ同じ方法です)。

明らかに、古いブロッキングソケットを使用すると、接続ごとに1つのスレッドに制限されます。そして、アクターはこれを処理できますが、もちろん、これは同時に処理できる接続の数に制限を課します。

単一のIOスレッドの場合、これ理論的にはボトルネックですが、IOスレッドが計算上非集中的な作業を行っているため、実際にはそれほど多くはありません(私たちの観察では)。NIOリアクターパターンについては、たくさんの良い議論があります。

于 2010-03-24T16:25:48.143 に答える