使用PHP和JS进行实时聊天

时间:2018-07-24 13:32:26

标签: javascript php long-polling

我正在使用PHP和JS编写一个简单的“实时”聊天。一切正常,但我偶然发现了一个问题。

我将邮件存储到txt文件中。

客户端,我有两个ajax请求(getMessages,sendMessage),一个用于检索存储在txt文件中的(新)消息,另一个用于向该文件中写入单个消息。

服务器端,每隔一秒检查一次文件的修改日期是否已更改(新消息已保存到文件中)。如果没有新消息,则请求将保持“待处理”状态(长轮询技术),否则我将用新消息来响应客户端。

有时会发生的情况是,如果彼此之间在短时间内发送了消息,则服务器仅响应最后一条新消息。有些消息(通常只有一条)不会发送到客户端,即使它们存储在txt文件中。

这是我写的代码:

getMessages

<?php
session_start();
session_write_close();
$ft = $_GET["ft"];
$file = "chat_messages.txt";
$length = 0;
$filetime = filemtime($file);
if(!($ft == "y" && file_exists($file))){
    while(!file_exists($file) || $filetime == filemtime($file)){
        $length = strlen(file_get_contents($file));
        sleep(1);
        clearstatcache();
    }
}
echo file_get_contents($file, TRUE, NULL, $length); 
?>

sendMessage

<?php
session_start();
session_write_close();
$file = fopen("chat_messages.txt", "a");
$text = "{ \"nickname\": \"" . $_SESSION["CHATNICKNAME"] . "\", \"date_time\": \"" . date("H:i:s") . "\", \"text\": \"" . rawurlencode($_POST["msg"]) . "\"};";
fwrite($file, $text);
fclose($file);
echo $text;
?>

希望有人可以提供帮助

0 个答案:

没有答案