質問するログイン新規登録
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

648閲覧

サーバ上のスクリプトを何かのきっかけで動かしたときだけクライアントのブラウザに通知したい

tsukasa_2211

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

3クリップ

投稿2025/07/30 01:56

0

3

サーバ上にあるスクリプトにPOSTで外部からデータを送られてきた時だけ、送られてきたことの通知をクライアントのブラウザに表示する方法がないかと探しています。

SSEも軽く調べたのですが、結局は定期的にサーバを監視して変更があった時に通知を送るような形で、リアルタイムで通知を送りたい場合は毎秒サーバ監視をする羽目になって負荷が大きくなると感じました。

【実現したいこと】
‐外部からPOST送信→ サーバ上のスクリプトが受信 → ブラウザを開いているクライアントにだけ通知

・外部から不定期にPOSTが送られてくること
・POSTが送られてきた時はリアルタイムで確認したい(10秒間隔の監視でも遅い)
・サーバ監視を数秒間隔ですることは避けたい

POSTを受信したスクリプトAが他の通知用のスクリプトBを動かしてそのBが通知をするようなものでも大丈夫なのですが、そもそも実現できる仕組みはあるのでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tabuu

2025/08/07 04:54

>SSEも軽く調べたのですが、結局は定期的にサーバを監視して変更があった時に通知を送るような形で、 SSEはサーバーを監視するものではないですし、サーバーとクライアントどっちの負荷を心配されていますか?
guest

回答1

0

httpd側でpostを受ける用のカスタムログファイルを作っておき
「tail -f」で監視続ければよいのでは?

sse.php

php

1<?PHP 2header("Cache-Control: no-store"); 3header("Content-Type: text/event-stream"); 4date_default_timezone_set("Asia/Tokyo"); 5 6$logFile = 'post.log'; // apacheのCustomLogを指定 7$command= 'tail -f -1 ' .$logFile; 8 9// winならpowershell 10//$command= 'powershell -Command "Get-Content ' .$logFile .' -wait -Tail 1"'; 11 12$handle = popen($command, 'r'); 13if ($handle) { 14 while (!feof($handle)) { 15 $buffer = fgets($handle); 16 if ($buffer === false) break; 17 $t=date("Y-m-d H:i:s"); 18 print "data:".json_encode(["message"=>htmlspecialchars($buffer, ENT_QUOTES, 'UTF-8'),"time"=>$t]).PHP_EOL.PHP_EOL; 19 if ( connection_aborted() ) break; 20 ob_flush(); 21 flush(); 22 } 23 pclose($handle); 24}

ブラウザ側の処理

javascript

1<script> 2const evtSource = new EventSource("sse.php"); 3evtSource.onmessage = function (event) { 4 console.log(event.data ); 5}; 6</script>

httpd.confの設定

「IfModule log_config_module」に以下追記してください

SetEnvIf Request_Method POST post_request CustomLog "logs/post.log" combined env=post_request

上記post.logをsse.phpで指定してやればpostされるたびにSSEでデータが飛んできます

投稿2025/07/30 04:16

編集2025/07/31 00:29
yambejp

総合スコア118037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2025/07/30 23:10

tail -f が動くのは サーバだけなので、「送られてきたことの通知をクライアント に表示する」を満たせないのでは?
yambejp

2025/07/31 00:31 編集

winterboumさん >「送られてきたことの通知をクライアント に表示する」を満たせないのでは? いえ、誰かがサーバーにPOSTすると、監視しているSSEに引っかかり別の誰かのブラウザに通知がリアルタイムに表示されます。sampleもあげてあるのでぜひお試しください (これを応用すればテキストファイルを利用したchatも簡単に実装できます)
winterboum

2025/07/31 23:19

そか。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問