-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[レビュー] Serverの責務分割 #1
Comments
おっしゃる通りですね。ありがとうございます! socket 状態の監視を server 側で一括 (select() )で行なっている ( io多重化 ) Connection クラスと Server クラスは 以下の情報を交換し合う
|
review 内容 メモ Serverクラスが肥大化している. connection を作成するServer クラスと、client との通信を担当するConnectionクラスに分割しましょうA: 僕 R: reviewer A: まず制約があります.
R: 1 の制約には何の意味があるのでしょうか? Server に受け渡さなくても、Connectionクラスが自分の担当するfd を監視するのはどうでしょうか. では、Server クラスのselect() をノンブロッキングモードで実行するとします。この場合、server クラスが他のconnection をブロッキングすることはなくなりましたが、以前としてconnection クラスが server クラスをブロッキングします。 では、Connection クラスもノンブロッキングモードで実行するとします。この場合、Connection クラスの実行を含めたメインループ内でブロッキング処理が存在しないため、CPU 使用率は100% になります。
R: それは間違っています。サーバーのコストは割り当てているCPU の数とその占有時間に依存します。 A: なるほど (最後は少し疑問。自 R: とはいえ、node js 等、シングルプロセスでio多重化しているプログラムがどのようにそれを管理しているのかは気になりますね. |
Server が select するのは責務にあってそうです。
ただacceptした後のsend/recvやHTTPメッセージのハンドリングまでやっているのは責務過剰です。
例えば Connection クラスを作って、これがHTTP接続の1つの recv/send を担うようにすれば、かなり見通しが良くなると思います。
The text was updated successfully, but these errors were encountered: