私は現在、すべての計算を行う C++ バックエンドを備えた html/javascript フロントエンドを開発しています。どちらも、すべてのリクエストを処理する統合された小さな dlib Web サーバーを介して接続されています。フロントエンドは次のようなデータをリクエストします。
pop=$.ajax({ //load Population array of 90
type:"POST",
url: "Pop90",
async:false
});
eval(pop.responseText);
Web サーバーは、1 つの文字列で大きな配列 (長さ約 4 000 000) を返します。これは、ローカルホスト経由で接続すると完全に機能しますが、別のコンピューターでサーバーにリモートでアクセスできません。ブラウザはしばらくロードしてからタイムアウトしますが、サーバー上のすべてのリクエストを確認できます。サーバーがエラーをスローします: dlib.server_http: クライアントからの http フィールドが長すぎます。しかし、クライアントからの http 要求はそれほど大きくないはずです。サーバーからの実際の投稿はそれほど大きくありません。かなり前にThx!もう少し詳しく説明します。Firefox でページをテストしましたが、localhost 経由でも機能しません。エラー コンソールは配列初期化子を表示します。これは Web サーバーの応答文字列であり、次のようになりますが、400 万のエントリがあります。
"ar=[-99999, -99999, ...]"
リクエストを処理する Web サーバー クラスは次のようになります。
class web_server : public server_http
{
vector<vector<double>> pop90;
vector<vector<double>> pop95;
vector<vector<double>> pop00;
public: web_server::web_server()
{
cout<<"init...";
loadArray("data/raw/afp90g.asc", &pop90);
cout<<" 90 loaded...";
loadArray("data/raw/afp95g.asc", &pop95);
cout<<" 95 loaded...";
loadArray("data/raw/afp00g.asc", &pop00);
cout<<" 00 loaded...";
cout<<"ready!"<<endl;
}
const std::string on_request (const incoming_things& incoming, outgoing_things& outgoing)
{
cout<<"---------------------------"<<endl;
cout<<incoming.path<<endl;
ostringstream sout;
sout<<get_file_contents("Seite.html");
cout<<"content type: "<<incoming.content_type<<endl;
cout<<"request type: "<<incoming.request_type<<endl;
string filename=incoming.path.substr(1,incoming.path.length());
if (incoming.path.substr(0,1) == "/" && incoming.path.length()>1)
{
if (incoming.path=="/css/Style.css") outgoing.headers["Content-Type"] == "text/css";
if (incoming.path.substr(0,8)=="/Pop90") return parseArray(pop90);
if (incoming.path.substr(0,8)=="/Pop95") return parseArray(pop95);
if (incoming.path.substr(0,8)=="/Pop00") return parseArray(pop00);
return get_file_contents(filename.c_str());
}
return sout.str();
}
};
わかりましたので、server_http.cpp ファイルを少しいじって、着信ストリームの完全なダンプを作成しました。ローカルに接続されている限り、完全に正常な http メッセージ間に -1 の値 (EOF) がランダムに存在するかのように継ぎ目があります。実際の IP 経由でリモート接続すると、-1 の値しか入力されません。ファイアウォール/アンチウイルスを無効にしました。ポート転送は問題ないはずです。私はまだ何をすべきかわからない。