2

HTML、CSS、jQuery を使用したチャット パネルがあります。問題なくイベント リスナーをセットアップします。問題なくクライアントにメッセージを送信できるテキスト/イベント ストリーム php ファイルをセットアップします。いずれかのクライアントから新しいメッセージを受信したときに、イベント ストリームを開いているすべてのユーザーにメッセージをブロードキャストするように、クライアントからこのサーバー スクリプトに通信するにはどうすればよいですか? サーバーは、新しいメッセージを受信したときにのみイベントを送信する必要があります。

ここに message_sender.php があります:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

while (1) {
 if ($newMessage){ //How does $newMessage get filled in an already running script?
  echo "id: 1234\n";
  echo "event: ping\n";
  echo 'data: {"newMessage": "' . $newMessage . '"}';
  echo "\n\n";
 }

 ob_flush();
 flush();
 sleep(1);
}

ここにjsがあります:

var evtSource = new EventSource("message_sender.php");

evtSource.onmessage = function(e) {
}

evtSource.addEventListener("ping", function(e) {
 var newElement = document.createElement("li");       
 var obj = JSON.parse(e.data);
 newElement.innerHTML = "ping " + obj.newMessage;
 $('#chat_panel').append(newElement);
}, false);

evtSource.onerror = function(e) {
    alert("EventSource failed.");
};

$('#message_form').submit(function(e){
 e.preventDefault();
 var message = $('#txtb_chat').val();

 $.ajax({
  type: 'POST',
  dataType: 'json',
  data: message,
  url: 'message_processor.php',
  beforeSend: function(){

  },
  success: function(){
   $('#txtb_chat').val("");
  }
 });
 return false;
});
4

1 に答える 1