HTTPのレスポンス受信時にIOExceptionの"Connection reset"発生
新規注文のhttp通信時にIOExceptionが発生するトラブルが3/13に起きました。
ログを見たところ新規注文のhttpリクエストは問題なく送信されていたようで、その後のhttpレスポンスを受信時にIOExceptionが発生していました。メッセージは"Connection reset"でした。(例外は発生しましたが新規注文は約定されていました)
具体的なエラー発生箇所ですが、トレードロボット基本コンポーネントのjp.robotbrain.net.WebクラスのpostHtmlの中にある以下の行でエラーになっていたようです。
returnValue = getResponseText(p_charset);
レスポンス受信時になんらかの理由でコネクションが解消されたようですね。1年3ヶ月運用してきてはじめて発生する現象ですので再現性はかなり低いと思いますが、年に1~2回しか訪れない大チャンスで再現されたら、たまりませんので以下のような対策をしました。
(対策)
新規注文時の処理は大きく以下のような流れになっています。
------------------------------
(1)新規注文フォームをPOST
(2)上記(1)のレスポンスを受信
(3)建玉一覧のページをGET
(4)上記(3)のレスポンスを解析して建玉がある場合は約定したと判断する。すぐに約定しない場合があるので10数回は(3)~(4)を繰り返す。
------------------------------
このようになっておりまして、約定確認は建玉一覧ページを見て行っていますので(2)のレスポンスは受信はしますが、処理上使っていません。ですので(2)で例外が発生しても無視して(3)に進むように処理を変更しました。
また、この対応を可能にするためにトレードロボット基本コンポーネントのjp.robotbrain.net.WebクラスのsendFormで送信用と受信用の例外をそれぞれHttpSendException, HttpRecvExceptionのように分けました。(v1.02まではIOExceptionで一本化されていましたので送信と受信どちらのエラーか判別できませんでした)
昨日公開したトレードロボット基本コンポーネントパッケージv1.03は上記の対応をしたバージョンになります。
| 固定リンク
「ロボット開発情報」カテゴリの記事
- 取引回数とシュミレーション結果の信頼性について考える-2(2009.10.01)
- シグナルボックスエディタv1.00とSignalSandBox(2009.08.26)
- オープンソース(LGPLv3)のトレードシステム部品をSOURCEFORGEで公開しました(2009.08.01)
- Eclipse3.5(Galileo)を使い始めました(2009.07.09)
- https通信の内容をモニタして解析する(フリーソフトBurpSuiteでキャプチャ)(2009.07.03)






コメント
突然ですが、コミュニケーションサイトを運営しております。
p-netbanking と申します。当サイトでは、
「人気ブログをランキング」を重要なテーマとし、
ブロガーの方々の、コミュニケーションの場を提供すると同時に、
どなたでも無料で参加でき、よりエンターテイメントに、
気軽に立ち寄れるサイトを目指し、日々、努力をしています。
貴ブログ様のご登録の御願いにコメント欄を
お借りしてご案内をいたしました。
是非とも、貴ブログのご登録、及び、
ランキング参加を御願いできれば幸いです。
こちらのサイトです。
http://www.p-netbanking.jp
検索バー横にブログ登録フォームがあります。
また、検索サイト・ランキングサイト等より訪問しております。
重複してご案内になりましたらお詫び申し上げます。
なお、全く興味のない方は、削除してください。
失礼いたします。
投稿: Anonymous User | 2009年3月19日 (木) 04時36分