5

フロントエンド テンプレート レイヤーがバックエンド アプリケーション サーバーを呼び出す n 層システムがあります。たとえば、いくつかの検索結果を取得する必要があり、フロントエンドがバックエンドを呼び出して結果を取得します。

テンプレート エンジンとアプリケーション サーバーの両方が PHP で記述されています。私は現在、テンプレート エンジンへのデバッグ セッションを開始するために PHPed を使用していますが、http 要求がリモート サービスに送信されると、デバッガーは座って IO が完了するのを待ちます。

私がやりたいのは、HTTP 呼び出しをエミュレートすることですが、実際には PHP プロセス内にとどまり、環境をある種のスタックに巨大にプッシュしてから、appserver 環境をロードして呼び出しを処理します。呼び出しが完了したら、env pop を実行し、http 呼び出しの結果を var に取得します (たとえば、出力バッファーを介して)。同じサーバーで両方のサービスを実行できます。すでにこれを行っているアイデアやライブラリを持っている人はいますか?

4

7 に答える 7

2

アプリサーバーにもデバッガーを実行してブレークポイントを設定できませんか? 2 つの異なるデバッグ セッション - 1 つはテンプレート エンジン呼び出しをトラップし、もう 1 つはアプリケーション サーバーで呼び出しをトラップします。

テンプレート エンジンのデバッグ セッションで、アプリケーション サーバーからの出力をトレースできるはずです。

2 つのデバッグ セッションを実行できない場合は、テンプレート エンジンから出力をキャプチャしてアプリケーション サーバー用のテスト入力をいくつか作成し、テスト用アプリケーション サーバー入力で 1 つのデバッガーを使用します。

于 2009-04-15T12:13:30.530 に答える
1

PHP にスレッドがないことについて話していると思いますか? そのため、サービスはプログラムのフローを停止し、デバッガーを停止します。それを回避する方法はありますが、それらは難しく、扱いにくく、ハック的です。

たとえば、HTTP トラフィックに Zend のようなフレームワークを使用する場合、HTTP クラスをハックして、サービスの読み取り/書き込みに組み込みのものではなくプリミティブ ソケットを使用し、小さなタスク スイッチャー (ループ :) を作成して、何が起こっているかを追跡します。

もちろん、ループ内で fopen ( 'http://...' ) と fread をチャンクで使用することもできますが、これでうまくいく可能性がありますが、ストリームでの http: サポートを有効にする必要があります。

于 2009-04-23T13:27:07.957 に答える
1

HTTP スニファを使用しないのはなぜですか? tcpflowのようなもの。

または、リクエストとレスポンスごとに完全な XML をファイルに記録することもできます。

残念ながら、あなたが達成しようとしていることはあなたの質問からは明らかではないため、これらは単なる推測です。おそらく、解決しようとしている問題をより明確に述べる必要があります。

削除サービスを呼び出すコードをリファクタリングし、依存性注入とモックを使用する可能性があります。これにより、「モック」された有効なデータを提供することで、フロントエンドの開発をバックエンドで分離できます。

それが役立つことを願っています。

于 2009-04-22T00:03:24.263 に答える
1

これはオープン ソースではありませんが、Charlesを確認してください。これはプロキシとして機能し、これまでに見た中で最高のデバッグ プロキシです。Linux、os/x、および Windows で動作します。

ほぼすべての HTTP ライブラリで、プロキシを指定できます。

于 2009-04-25T16:09:06.277 に答える
1

PHP のデバッグについてはよくわかりませんし、「環境をある種のスタックにプッシュする」方法についてもよくわかりませんが、ここで netcat + いくつかのシェル スクリプトがトラブルシューティングに役立つのではないでしょうか?

netcat を使用して次のことができます。

  • HTTP リクエストのスプーフィング
  • ウェブサーバーのように振る舞う (ポートをリッスン - ポートを選択、任意のポート!)

http://www.plenz.com/netcat-tips

これを使用して、一方の端で偽の Web サービスをスタブ化できます。

echo "<xml .. <node>hello php!</node>" | netcat -lp 80 ... etc

...そして、ポートでリッスンすることで、Web サービスへの着信要求がどのように見えるかを非常に明確に確認できます。

Web サービスのように機能する仲介者として netcat を使用してシェル スクリプトを使用し、PHP を満足させるためにすぐに一般的なものを返し、実際のアプリケーション サーバーに要求を渡し、結果をログに記録できますか?

超シンプル。

netcat Web サーバー http://img240.imageshack.us/img240/791/netcat.jpg

于 2009-04-24T16:56:52.660 に答える