こんにちは
今、ある運用の監視システムの設計をしています。
1)サーバ Widnows 2003 Server
2)CPU 64bit
3)メモリー 8GB
4)監視端末 約1000台
端末からは
1)起動時に起動通知をサーバに投げる
2)障害発生時に障害コードをサーバに投げる
3)復旧時に復旧通知をサーバに投げる
4)終了時に終了通知をサーバに投げる
5)サーバから端末へ定期的に死活監視を行う。
ソケット通信での実装を想定していますが、
このような場合、
起動時にconnectして終了時にcloseするような設計をすべきでしょうか?
それとも毎回の通知においてConnect、Closeを行うべきでしょうか?
そもそも1000台の接続をサーバで張ることが出来るのか?
という課題もあります。
よろしくお願いします。
補足ですが、
ソケットはTCPソケットを想定しています。
> 起動時にconnectして終了時にcloseするような設計をすべきでしょうか?
> それとも毎回の通知においてConnect、Closeを行うべきでしょうか?
case-by-case.
とはいえ1000本のsocketを始終繋ぎっぱてのも問題。
# connectせずに「UDPで投げっぱなし」という選択はアリですか?
# 確実に相手に届く保証はありませんけど。
ありがとうございます。
もともとudpがいいのでは?と考えていましたが
重要な通知もありますので、
tcpで行わざるを得ません。
1000本のソケットつなぎっぱは問題ですよねえ。
やはり・・・
基本は端末からは
1)サーバへconnect
2)サーバへwrite
3)サーバへClose
って動きになるのでしょうか?
大半の通知は端末側は通知した後のサーバの処理結果を知らなくてもいいです。
一部だけ、知らないといけない通知もありますが、
それは
1)サーバへconnect
2)サーバへwrite
3)サーバへselect
4) サーバよりread
5)サーバへClose
って動きになるのでしょうか?
サーバはマルチスレッドを想定していますが
子プロセスとマルチスレッドは同義語ですか?
手順はそんなところでしょうね。
> サーバはマルチスレッドを想定していますが
> 子プロセスとマルチスレッドは同義語ですか?
違います。
プロセスは実行モジュール(exe)が別。
スレッドはサーバ内の1関数です。
ありがとうございます。
さて、ソケットサーバが一つ端末からの接続で占有されないためには
ACCEPT後子プロセスを作成するのが一般的な方法ですか?
下記のサイトで勉強していますが・・・
http://hp.vector.co.jp/authors/VA003991/kouza/senior/kouza_socket.html
よろしくお願いします。
> さて、ソケットサーバが一つ端末からの接続で占有されないためには
> ACCEPT後子プロセスを作成するのが一般的な方法ですか?
'一般的'とは如何なる意味ですか?
実装次第でどうにでもできます。
スレッドでもプロセスでもselect待ちでも。