ダイジェスト認証付きHTTPサーバ負荷ツールを作成するには?


kkk  2004-12-16 02:09:40  No: 55703

現在、ダイジェスト認証付きHTTPサーバ負荷ツールを作成しています。
ツールはSDIベースで親画面から子スレッドを複数作成し、
マルチスレッドでHTTPサーバへの接続を繰り返し行い、能力を評価します。
HTTPサーバへの接続は”CInternetSession”クラスを使用し、ダイジェスト
認証、ユーザ名、パスワードをセットし、接続しようとしているのですが、
子スレッドの”SendRequest”メソッドでのPOST送信中に別の子スレッドの
”GetHttpConnection”が動作してしまうと、サーバからの401応答後の
POSTユーザ名、パスワードが別子スレッドでセットしたユーザに書き換わ
ってしまいます。
オブジェクトがユニークで作成されているか調べましたが、問題なく
”GetHttpConnection”メソッドで書き換わっているとしか思えません。
GetHttpConnectionは一つのユーザしか定義できない仕様なのでしょうか?


なーめ  2004-12-16 02:17:43  No: 55704

WebApplicationStressTool(WAS)を作ろうとしていますね。
>> CInternetSession
問題があるなら、CSocketに立ち返って、プロトコルをキチンと
組み立ててみては。
CSocket を作ってダミーサーバを作ってIEがどのようなリクエスト
を送っているか確認してみるのもいいですね。


kkk  2004-12-16 03:57:43  No: 55705

御回答ありがとうございます。
たしかにCSocketレベルからロジックを組めば、
ローカルデータベースでユーザを管理できるので、
動作にこの現象は発生しないし確実だと思います。
以前にbsd socketやCSockを使用したHTTPサーバとクライアント
も組んでいましたので作り込めば、出来ると思うのですが、今回は
時間の都合上このAPIを使用してしまいました。
GetHttpConnectionで共通エリアにユーザ情報を書き込んでいないかの
チェックを行なったのですが、最後まで追い切れませんでした。
リクエストプレイヤーのAPIであるため、複数オブジェクトを作成
したならば、通常別エリアに保持してもおかしくないと考えているのですが、
そうではないのでしょうか?


なーめ  2004-12-16 10:17:09  No: 55706

>> HTTPサーバとクライアントも組んでいました

結構できる方とお見受けしますので、
失礼な予想は立てられないのですが。
私の予想では CInternetSession の問題ではなく、
スレッド間のメモリ管理の問題ではないかと思いますが。
AfxBeginThread() ですよね。


kkk  2004-12-16 21:47:21  No: 55707

>> AfxBeginThread()
はい、その通りです。
これでスレッドを立てています。
スレッド間メモリ管理の可能性は考慮していませんでした。
これから調査してみます。


kkk  2004-12-24 21:51:58  No: 55708

調査結果遅れました。
メモリ周りを調べてみましたが、異常はありませんでした。
個別にオブジェクトが作成されているようです。
しかし、調査の結果、接続ユーザ確認用のAPIが用意されていることや、
SSL/TLS暗号化モジュールの仕様などから考えると
このAPI自体がマルチスレッドに対応していないのではないでしょうか?
今はセマフォによる排他制御をかけることで、この問題は一応回避しています。


なーめ  2004-12-25 18:53:12  No: 55709

>> このAPI自体がマルチスレッドに対応していないのではないでしょうか?
というかマルチユーザを抑制しているのかもしれませんね。
レジストリ書き換えか、ファイルか。
別プロセスでも同様なことが起こるならば、
このことは確定的ですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加