質問: Websocketでチャットツールを試しに作っています。 5分間、どのクライアントからも応答がなかった場合、 サーバから何か表示させようと思います。 この時に、 ・websocket通信をしているスレッド ・カウンターを回すスレッド の2スレッドが必要かなと思うのですが、どちらをメインスレッドにするべきですか。 そもそも、スレッドってWeb系だとどういう時に使うんでしょうか。 よく使うパターンとかあったら教えていただきたいです。 (今回の場合、「カウントするときに別スレッド立てるよ」とか、逆に、「ポーリングするときは別スレッドでlistenするだけのスレッドを立てるよ」とか)
回答: Push型ですか?そうならば、pushする人でしょう。 web系ならthreadは、I/Oなどどれくらい時間がかかるか不明なもの、並列クリエするそれぞれのクリエを別々にします。 質問者の例の場合、 大量のユーザがいるchatであれば、ユーザ毎か、セッション毎にthreadにする。login時にthreadを作成して、chat終了で、threadを終了する。ように設計します。大量のメッセージを流すユーザがいた場合、全部を単一サーバで処理すると、サーバが忙しくなりすぎて、他のユーザの処理も影響を受けます。 別theadであれば、大量メッセージとは関係ないユーザへの影響は少なくなります。 ユーザが寝ているときに、そのユーザに注意を喚起するのであれば、そのユーザーのthreadがタイマを監視して処理します。他のユーザに寝落ち報告をするのであれば、寝落ち警告をマスタthreadに送って、マスタthreadがしかるべき処理します。起きていると思われるユーザ全員に連絡するとか、自動的にthreadを終了させるとか.. 気に入ったら評価してね。