2016-10-04 7 views
-1

私はソケットでクライアントからの複数のリクエストを受信し、スレッドで処理するサーバーとして機能しています。TCP接続あたりのリクエスト数が最大の場合は

接続で同時に処理できるリクエストの最大数を設定するには、TCPレベルのパラメータを設定する必要がありますか?なぜなら私のサーバー側の 、要求を処理することは、私は他の要求をキューに登録されていることを観察遅い場合(クライアントが要求を送信しましたが、私は後半にそれを受け取ると言う)それは長いがかかる場合

親切に私に

+0

最大値はありません。設定することはできません。できるだけ問題を解決できません。接続ごとの要求は順次的で、問題は並行性であり、むしろ問題です。別のスレッドで各クライアントソケットを処理する必要があります。 – EJP

+0

私はマルチスレッドファッションonly.requestsで要求を処理している持続的なTCP接続で確立され続ける?私は次の要求を送信するまで応答を待つか、天気から独立している前回の要求に対して応答を送った。 – jan

+0

既に[接続または要求をマルチスレッドの方法で処理している]場合は、あなたの質問が実際に何であるかを見ることは不可能ではないにしても困難です。確立された接続でクライアントがどのように動作するかは、接続ごとに最大数の要求を設定することとはまったく関係ありません。 – EJP

答えて

1

を導きます作業を行う時間であり、複数の接続を同時に処理したい場合、作業のやり方を変更する必要があります。

長いリクエストの処理中にCPUを積極的に使用している場合は、複数のスレッドが必要です。これは、複数のコアが利用可能であると仮定して、実際にはより多くのCPU時間/秒を得る唯一の方法です。

ファイルIOのようなことを待っている場合は、非同期処理を使用して1つのスレッドでリクエストを処理できますが、一度に少しずつ処理してください。

TCP接続の最大数を設定しても、より多くのプロセスをより迅速に処理することはできません。接続を拒否し、先着順の動作を許可しない場合もあります。特定のクライアントが通過するかどうかは、ランダムになります。

+0

現在、私は複数のスレッドのみでリクエストを処理しています。しかし、DBの使用率が高い場合はいつでもキューイングを参照しています。通常、リクエストを処理するのに1秒かかりますが、問題は発生しません。 4秒のクライアントは、彼らが時間通りに応答を受け取っていないと言います。タイムアウトは25秒ですが、私は4秒で処理と送信を行っています。要求はこれまでのところどこにあるのですか? – jan

+0

データベースが遅すぎる場合は、速度を上げる必要があります。あなたのクライアントがタイムアウトしたり、拒否された接続を取得したいかどうかは、それほど重要ではありません。あなたのデータベースを飽和させているなら、おそらく多くの接続を受け入れたくないかもしれませんが、それを解決する方法はたくさんあります。しかし、TCP接続を調整することはおそらく間違ったアプローチです。 – xaxxon

関連する問題