私が取り組んでいるTCPサーバープロジェクトがあります。指定されたポートで接続を非同期にリッスンし、新しい接続を受け入れて、それらからのデータの待機を開始します。新しいクライアントはそれぞれ、接続時に ID を送信します。これにより、どのソケットがどのクライアントに属しているかがわかります。
最低 100000 のクライアントが同時にサーバーに接続されます。
問題は、これらのクライアントをどのように保管すればよいかということです。
class Client
{
public Socket Socket { get; set; }
public int ID { get; set; }
}
スレッドセーフなタイプではないため、次のようなものList<Client>
は間違いなく壊れます。List<T>
サーバーに接続するときにクライアントをリストに追加し、接続が失われたときにリストから削除する必要があります。また、たとえば ID が 5 のクライアントにメッセージを送信できるようにする必要がありますがList<T>
、非同期環境で a を繰り返すのはひどい考えです。コレクションと対話する必要があるたびに同期ルートをロックしても、パフォーマンスに関しては何の役にも立たないと思います。
では、パフォーマンスには何を使用すればよいでしょうか。
編集: .NET 4を使用しています