PHP/JQuery - 从另一个客户端向一个客户端发送数据

PHP/JQuery - Send data to a client from another client

我正在建立一个人对人的聊天,并希望刷新 A 的页面,在 B 发送消息时加载 B 发送的新消息。当 B 通过 PHP 发送消息时,我如何向 A 发送 message/data?我知道我可以通过 Ajax 查看 A 的页面,但是不断 运行 一个 MySQL 查询会大大降低服务器的速度。有什么想法吗?

编辑: 使用服务器发送事件,这是我的脚本代码:

if(typeof(EventSource) !== "undefined") {
    var source = new EventSource("update.php?user=<? echo $recip ?>");
    source.onmessage = function(event) {
    document.write(event.data);
    if (event.data=="yes"){
    window.location.href="/chat?with=<? echo $recip ?>";
    }
    };
} else {
    document.getElementById('info-text').innerHTML="Hmm... looks like your browser doesn't support auto updating. Please refresh the page to check for new messages." //'
}

这是我的 PHP 代码:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$user=$_GET['user'];
$sql=mysql_query("SELECT * FROM chatmsg WHERE sender='$myusername' AND receiver='$recip' OR sender='$recip' AND receiver='$myusername'");
$newrows=mysql_num_rows($sql);
if ($newrows!=$_SESSION['chat'.$user]) {
echo "data: yes";
flush();
}
else {
echo "data: no";
flush();

问题是,MySQL 中有新行时没有任何反应。

我找到了解决办法,各位。我仍然使用Server Sent Events,但做了一些更改并发现了错误。这是最终的工作代码:

PHP:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); 
header("Access-Control-Allow-Origin: *");
$user=$_GET['user'];
$sql=mysql_query("SELECT * FROM chatmsg WHERE sender='$myusername' AND receiver='$user' OR sender='$user' AND receiver='$myusername'");
$newrows=mysql_num_rows($sql);
if ($newrows!==$_SESSION['chat'.$user]) {
  $msg="yes";
}
else {
  $msg="no";
}  
echo "data: {$msg}\n\n";
flush();
sleep(10);

(休眠是为了节省服务器资源)

JS:

var source = new EventSource('update.php?user=<? echo $recip ?>');
source.onmessage = function(e) {
  if (e.data=="yes") {
    window.location.href="viewchat.php?viewer=<? echo $viewer ?>&recip=<? echo $recip ?>";
  }
}