問題タブ [http-daemon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - デーモンの後でクリーンアップするにはどうすればよいですか?
ドキュメントで概説されているループ構造の修正バージョンを使用して、HTTP::Daemonのローカルインスタンスを実行しています。ユーザーの要求に応じてループを終了することを可能にしましたが、その後Perlスクリプトを実行するとエラーが発生します。
HTTP ::デーモン:アドレスはすでに使用されています... / path / to / script行NNN、行3で伝播されます。
良い市民になり、デーモンの後で片付けるには、これ以上何をしなければなりませんか?
perl - perl HTTP::Daemon を使用する HTTP サーバー - サーバーが実行されている同じコンピューターからのみ動作します
簡単な HTTP サーバーを作成し、そのサーバー用のクライアントもいくつか作成します。現在、HTTP::Daemon を使用して perl で作成した単純なサーバーをブラウザーでテストしています。
私のサーバーコードは次のとおりです。
現在、私の問題は、同じマシンでテストすると、このサーバーが正しく動作することです。同じネットワーク内の別のコンピューターからサーバーにアクセスしようとすると、サーバーは要求をまったく受信しません。サーバーを外部の世界に公開するための必須の (単純かもしれませんが、私は初心者です!) ステップがありませんか?
この点についてご協力いただきありがとうございます。
更新: 以下は、サーバーを実行したときに受け取る出力の例です。
ウェブサーバー開始!
サーバーアドレス: 0.0.0.0
サーバーポート: 80
私に連絡してください:
リクエストを頂きました…
リクエストを頂きました…
URI: /
リクエストを頂きました…
URI: /
リクエストを頂きました…
リクエストを頂きました…
URI: /
最新の更新:
問題が上で説明したものとは異なることに気付きました。結局、別のコンピューターからサーバーにアクセスできました。コードからわかるように、リクエストを満たすために別のスレッドを作成しているわけではありません。奇妙なことに、ブラウザーからサーバーにアクセスすると、最初に要求を送信したブラウザーを閉じるまで、他のコンピューターからのすべての要求がタイムアウトになります (そして、要求に対する応答が得られます)。一方、同じブラウザからの複数のリクエストは正常に処理されます。ただし、libwww-perl ライブラリを使用して Perl で記述されたクライアントからリクエストを送信した場合、これは発生しません。
これはどのように最初の問題に変換されますか? サーバーをテストするたびに、最初はブラウザーを使用して同じマシンからテストしました。次に、最初にサーバーをテストしたブラウザーを閉じずに、別のマシンからサーバーにアクセスしようとしました。そして、予想通り、うまくいきませんでした。
コメントありがとうございます。
http-daemon - HttpDaemon の実装方法
私は Java プログラマーです。HttpDaemon を実装する必要があります。「C」または「Perl」で記述されると思います。それが何であるか、そしてそれを実装する方法について私を親切に助けてください。
perl - ループを停止するとHTTP::Daemonがクラッシュする
IISで一連のスクリプトを設定しなくても、VMWare Perl SDKから大量のデータを簡単に表示できるように、アドホックGUIに取り組んでいます。基本的な考え方は、スクリプトを起動し、2つのプロセスをフォークさせることです。1つはHTTP::Daemon Webサーバーで、2秒後にWin32::IEAutomation実行ブラウザーです。かわいくないことは認めますが、VMCOMSDKよりもVMPerlSDKの方が少し快適です。さらに、これを機能させることができるかどうかを知りたいと思っています。
私の知る限り、プログラムは大丈夫です。フォークは機能します。小さなURIパーサーが機能します。唯一の問題は、サーバーをシャットダウンするために/ quitを呼び出そうとすると、スクリプトが爆発することです。
(IISとAutoITでこれをどのように行うべきかを除いて)どんな提案でもいただければ幸いです。ありがとう!
perl - HTTP::Daemon は、SIGTERM でリープされないサブプロセスをフォークします
更新しました:
私は単体テストを持っています(Xと考えてください)。サブプロセス (Y) があります。Y は明示的にフォークしません。X は Y を実行できるようにフォークします。X は次のとおりです。
X から得られる出力は次のとおりです。
これは、Y が信号を受信して停止したことを示しています。しかし、Y は停止せず、機能していない状態 (以前に "ゾンビのような" と呼んだ状態) に入ります。私が知る限り、これは完成したプロセスであり、/procからは利用できませんがkill(0, $pid)
、可視化できます。ps
実際のプロセス Y では、別の話です。
Y の出力にはExiting...
も も表示されず、メッセージのみが表示されます。Y は機能しており、X からのすべての接続を受け入れるため、テストに合格します。止まらないだけです。Received signal
Starting server
これは、X シグナル Y の前後のデバッグからの出力です。
defunct
Yの状態に注意してください。2 つのプロセスがあることに注意してください。私は2つを開始しておらず、分岐していないため、HTTP::Daemon
分岐したと想定しています。X を明示的に変更して、別のシグナルを送信しました。今回は、Ctrl-C を押したときのように、ハングと両方の s をSIGINT
実際に停止するように送信しました。今度は Y からメッセージが届きますが、まだ機能していない状態になり、プロセスが 2 つ残っています。X
Y
Signal received
私の質問はHTTP::Daemon
、Perl とは対照的に対象としています。このカオスを引き起こすために実際にHTTP::Daemon
(から派生した)は一体何をしているのですか? またその理由は何ですか? 第二に、 HTTP::Daemon が行っていることに対処するにIO::Socket::INET
はどうすればよいでしょうか?Y
perl - Perl HTTP デーモン サーバー - POST JSON 本文の読み取り
HTTP::Daemonを使用して、API 用の http サーバーを作成していました。次の例とdocの助けを借りて、基本的な HTTP サーバーを作成することができました。
ただし、私の API は、サーバーへのポスト リクエストで JSON を本文として受け入れる必要があります。そのため、処理できるように JSON を読み取る必要があります。私は知っている、URLパラメータの読み方$r->uri->query_form();
POST JSON を読み取る方法はありますか?