###前提・実現したいこと
当方サーバ、C#の勉強中であります。
C#でTCP通信のサーバを作成しております。
複数クライアントを想定しております。複数というのは同時に0~100万のクライアントを想定しております。
クライアントは1~1000番あるファイルの中の「ファイル■番の●文字から●●文字まで送ってというリクエスト」を送ります。
サーバは接続してきたクライアントに、「ファイル■番の●文字目から●●文字目まで」お送るという工程をします。
データのやり取りが終了したら切断します。
プログラムの流れは
TcpListenerで随時、リクエストしてきたクライアントをTcp接続承認
↓
クライアント毎にスレッドを作成
↓
===スレッド毎====
クライアントからデータを受信
↓
受信データから指定ファイルをバッファに読み込む
↓
●文字目から●●文字目まで抽出
↓
クライアントへデータを送信
↓
切断
===スレッド毎====
というものにしようかと思っております。
つまり、1スレッド1クライアントとなります。
その一つ一つのスレッド毎の中でファイルを読み込み、からデータ送受信
、切断を行います。
そこでなのですが、各ファイルのサイズが2Mbyteとしたとき、万が一にも
100万のクライアントが一気にリクエストをサーバに送った時、サーバは固まると思います。(メモリ不足)そこで、
①【ある一定数の接続されたクライアントがいるときは、TcpListnerを停止】もしくは、
②【スレッドを使わずにクライアントが1つ接続していればTcpListenerを停止】させようかと思っております。(1つずつ接続はサーバとしてどうなのか。。。)
なので、リクエストをだしたクライアントには返事が帰ってこないので、
返事が帰ってこないときは定期的にさらにリクエストを出してもらおうと思っております。
ここで、上記の仕様に改善点等のご指摘を下さるとうれしいです。
また、実際のサーバプログラムはどのようなものなのかご教授下さるとうれしいです。URLでも嬉しいです。
尚今のところ②で考えております。
###補足情報(言語/FW/ツール等のバージョンなど)
VisualSudio2015 C# NET4.5
###追記
ご回答有難うございます。ご回答いただいたリンク等で勉強させて頂き、何を使うか検討させて頂きます。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/30 14:16