質問: 自作の完全自動株式売買アプリケーションを運用しています。 サーバにアクセス>HTML取得>解析>アルゴリズムに基づいて発注処理 というロジックです。 当たり前のことですが、クライアント側の処理時間に比べてHTML取得に時間がかかります。(200msec) アクセス先のサーバの処理能力によるものが大きいとは思いますが、クライアントーサーバ間にあるルーターなどの ネットワーク機器の処理能力も少なからず影響していると思われます。 このHTML取得時間を極力早くするために、適していると思われるルーターを教えてください。 (実効スループットの大きさではなく、レスポンスの速さ重視) また、HTML取得を高速化するテクニックなどがありましたら合わせて教えていただけると大変助かります。(使用言語はC#) ルーターは現在の所、マイクロ総研のSuperOPT-100Eなどを検討しています。それでは宜しくお願いいたします。
回答: HTMLをどのような方法で使っているか(どのライブラリを使っているか)にもよると思いますが、サーバ側がHTTP/1.1以上であれば、基本的に持続型接続(keep-alive/persistent connection)を使うのが効率的です。 通常HTTPのリクエストでは、クライアントからサーバにHTTPリクエスト(GETなど)を送り、サーバからクライアントにHTTPレスポンス(HTML本文)が返されて1セッションが終わります。このとき、毎回TCPコネクションが切断されます。 持続型接続の場合は、リクエスト/レスポンスを1往復した後もTCPコネクションを繋いだままにしておき、そのまま次のリクエストを送ることができるため、TCP/IPパケットを節約することができます(結果としてたくさんのHTMLをより早く取得できます) また、HTTP/1.1では持続型接続を前提としたリクエストのパイプライン化が認められているため、複数のリクエスト(URL)を一度にサーバにまとめて送ることができます。サーバはHTMLを順番にまとめて送り返してくれます。この場合パケットの節約にもなりますし、サーバ側も先読みの処理ができる(クライアントが1つ目のHTMLを受け取っている間に次のHTMLの準備をして送れる)場合があるためレスポンス時間が早くできる場合があります。 参考 HTTP Pipelining FAQ - MDC [Studying HTTP] Persistent Connections 例えばブラウザは、最初にHTMLを取得した後、HTMLに含まれる複数の画像をパイプライン処理を使ってまとめて取得するといったことを行ったりして表示の高速化を図ります。