win nginx同時ブロック問題
問題は次のとおりです.
私はwrootディレクトリの下に仮想ドメイン名を構成したディレクトリv.juheがあります.cn、そしてv.juhe.cn以下に確立する2つのファイルはそれぞれtest 1である.phpとtest 2.php
test 1.phpのコードは
test 2.phpのコードは
ではvvにアクセスするとjuhe.cn/test2.phpの場合は10 s経過してからブラウザにnihaoという文字列が現れるので、この10 sではvvにアクセスします.juhe.cn/test1.phpというアドレスはtest 2までです.phpの実行が完了してから応答するしかありません.以前、私はローカルでaプロジェクトをテストしたとき、aプロジェクトがbプロジェクトのインタフェースを呼び出すときもブロックの問題が発生していることを発見しました.当時の解決構想は異なる仮想ドメイン名の下で異なるポートを開いて、この問題を解決しました.今日の問題はデータベースのlock for update機能をテストしたときに偶然見つけたものです
呼び出しインタフェース1とインタフェース2を見つけました
インタフェース1のsql=select*from xxx where id=1 for update;sleep(10)
インタフェース2中select*from xxx where id=2;
このように意外にもロックされて、まさか時計をロックしたのではありませんか、それからずっと上のコードをテストして、完全にデータベースの操作を除去して、ただ1つの言叶を出力して、结果もブロックが现れたことを発见して、それではデータベースと関系がなくて、最后にネット上で解决の方法を调べて、nginxです.confのhttpモジュール構成に追加されました(私は8つの仮想ホストの構成を持っているので、ここで8つのポートを開きました)
変更後:
仮想ホストの上を含むすべてのものを置き換えることを覚えておいてください.そうすればいいです.
しかし、これにはもう一つの問題があります.chromブラウザで同じファイルにアクセスしたとき、test 1では、このファイルのコードは次のようになります.
では、ブラウザでアクセスすると、20 s待ちになり、コードが次のように変更されます.
ブラウザを変えたり、postmanテストツールでアクセスしたりするときは、待つ必要はありません.
私はwrootディレクトリの下に仮想ドメイン名を構成したディレクトリv.juheがあります.cn、そしてv.juhe.cn以下に確立する2つのファイルはそれぞれtest 1である.phpとtest 2.php
test 1.phpのコードは
exit("zheshiweishms");
test 2.phpのコードは
sleep(10);
echo 'nihao';
exit();
ではvvにアクセスするとjuhe.cn/test2.phpの場合は10 s経過してからブラウザにnihaoという文字列が現れるので、この10 sではvvにアクセスします.juhe.cn/test1.phpというアドレスはtest 2までです.phpの実行が完了してから応答するしかありません.以前、私はローカルでaプロジェクトをテストしたとき、aプロジェクトがbプロジェクトのインタフェースを呼び出すときもブロックの問題が発生していることを発見しました.当時の解決構想は異なる仮想ドメイン名の下で異なるポートを開いて、この問題を解決しました.今日の問題はデータベースのlock for update機能をテストしたときに偶然見つけたものです
呼び出しインタフェース1とインタフェース2を見つけました
インタフェース1のsql=select*from xxx where id=1 for update;sleep(10)
インタフェース2中select*from xxx where id=2;
このように意外にもロックされて、まさか時計をロックしたのではありませんか、それからずっと上のコードをテストして、完全にデータベースの操作を除去して、ただ1つの言叶を出力して、结果もブロックが现れたことを発见して、それではデータベースと関系がなくて、最后にネット上で解决の方法を调べて、nginxです.confのhttpモジュール構成に追加されました(私は8つの仮想ホストの構成を持っているので、ここで8つのポートを開きました)
upstream phpfastcgi_proxy {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003;
server 127.0.0.1:9004;
server 127.0.0.1:9005;
server 127.0.0.1:9006;
server 127.0.0.1:9007;
# ……
}
その後nginx.confとvhostディレクトリの下のすべての虚名ドメイン名の下でfastcgi_pass 127.0.0.1:9xxx;
変更後:
fastcgi_pass phpfastcgi_proxy;
仮想ホストの上を含むすべてのものを置き換えることを覚えておいてください.そうすればいいです.
しかし、これにはもう一つの問題があります.chromブラウザで同じファイルにアクセスしたとき、test 1では、このファイルのコードは次のようになります.
echo 'nihao';
sleep(20);
では、ブラウザでアクセスすると、20 s待ちになり、コードが次のように変更されます.
echo 'nihao';
//sleep(20);
ブラウザで別のウィンドウアクセス(同じファイル)を開くか、前のアクセスが終了するまで待たなければなりませんが、ここで待っている20 s以内であれば、ブラウザを変えたり、postmanテストツールでアクセスしたりするときは、待つ必要はありません.