php - AS3+PHP+MySQL : home-made online chat not always reactive

标签 php mysql actionscript-3

我使用 Flash (AS3) 客户端编写了某种在线聊天系统,该客户端从与 MySQL 数据库通信的 PHP 脚本发送和检索数据。

它运作良好,除了以下事实:偶尔,我的客户不会收到新的聊天热线之一,即使它们已在数据库中正确注册。

这是它背后的基本逻辑:每个用户在数据库中都有一个条目,每个条目都有一个 lastChatCheck BigInt(16) 变量。 当用户键入并发送一条聊天热线时,客户端将它发送到一个 PHP 脚本,它与存储在数据库中的 date 一起(它也是一个 BigInt(16 ))。 Flash 客户端每 250 毫秒通过 getter PHP 脚本检查每个聊天行,其中(行的日期>用户的 lastChatCheck),然后将用户的 lastChatCheck 设置为最后检索到的行的 < b>日期。 (请告诉我这是否令人困惑或解释不当。)

我确信我编写的用于发送新行的代码是正确的,因为我发送的所有内容都已正确存储在数据库中。

获取聊天行的(简化的)PHP 代码如下:


$result=mysql_query('SELECT lastChatCheck FROM players WHERE id='.$id);
while ($row=mysql_fetch_array($result))
{
$lastChatCheck=$row['lastChatCheck'];
}

$output='';

$chatDate=0;

$result=mysql_query('SELECT * FROM chat WHERE date>'.$lastChatCheck);
while ($row=mysql_fetch_array($result))
{
$chatSayer=$row['sayer'];
$chatText=$row['text'];
$chatDate=$row['date'];
$result2=mysql_query('SELECT name FROM players WHERE id='.$chatSayer);
while ($row2=mysql_fetch_array($result2))
{
$output.=$row2['name'].' : '.$row['text'].'<br>';
//(in reality, $output is formatted as an XML object)
}

}


if ($chatDate!=0) mysql_query('UPDATE players SET lastChatCheck='.$chatDate.' WHERE id='.$id);

这会跳过一些最近的聊天行是否有任何合乎逻辑的原因?有什么办法可以解决这个问题吗?

最佳答案

如果我在发布聊天的同时检查聊天,这意味着检查时间和发布的 bigint 是相同的,那么可能会在“当前时间”添加聊天消息 您获取了当时的聊天记录之后。换句话说,你可以有这个序列:

时间 0:客户端 A 获取聊天记录。设置 lastChatCheck = 0。

时间 1:客户端 A 获取聊天 > 0。设置 lastChatCheck = 1。客户端 B 发布聊天,时间 1。

时间 2:客户端 A 获取聊天记录 > 1. 没有看到客户端 B 的帖子。

为什么不使用 TIMESTAMP 而不是使用 BigInt?

此外,在您的 PHP 代码中,考虑执行 JOIN,这样您就不必为每个聊天行执行单独的 MYSQL 调用。

关于php - AS3+PHP+MySQL : home-made online chat not always reactive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898726/

相关文章:

php - 我如何找到哪个 `guard` 在 Laravel 中发出当前请求?

Python:从数据库列查询干净的字符串值或清理 View /模板上的字符串是否更快?

c++ - 从 C/C++ 使用 SSL 访问 MySql

actionscript-3 - 如何通过组合框导航到另一个文件?

actionscript-3 - Flex播放一系列声音文件

php - PHP 调试包的用途

php - 如何使图像看起来像图像背景一样完整

php - PDO 获取返回空值

mysql - 在内连接上添加 where 子句

flash - AS3 : Extending default ScrollBar component