我正在使用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;
?>
希望有人可以提供帮助