Я пытаюсь создать простое приложение для чата в Интернете, используя длинный опрос и php.
В основном у меня есть 2 функции ajax на клиенте,
1. update: обновить сообщения чата.
2. отправить: чтобы отправить сообщение, которое вводит пользователь.
Функция обновления выполняет длинный опрос, который заключается в ожидании в течение 10 секунд или до появления нового сообщения.
Функция отправки пишет в базу данных.
Моя проблема заключается в том, что во время работы функции обновления (длинный опрос) функция отправки не может быть запущена. И только после завершения работы функции обновления запускается функция отправки. Это ожидаемое поведение или что-то не так с моим кодом?
Если вы хотите посмотреть сеть, вы можете получить к ней доступ здесь: http://tedhost.awardspace.us
А если вам лень зарегистрироваться, вы можете использовать имя пользователя dummy0 и пароль 123456
Вот код .. Извините, если мой код грязный ..
Код Ajax: http://tedhost.awardspace.us/ajax.js
update_chat.php
<?php
session_start();
$filename = "wew.xt";
$user = $_SESSION["user"];
$last = $_SESSION["lmsgtime"];
if (file_exists($filename)) {
$lama = 0;
$mulai = time();
do {
$fin = fopen($filename, "r");
$current = 0;
fscanf($fin, "%d", $current);
fclose($fin);
usleep(10000);
$akhir = time();
} while($current <= $last && $akhir - $mulai <= 10);
}
include "con.php";
mysql_select_db($dbname, $con);
$sql = "SELECT * FROM chats WHERE time > '$last' ORDER BY time ASC";
$res = mysql_query($sql);
/*
$lama = 0;
while (mysql_num_rows($res) <= 0 && $lama <= 10000000) {
$res = mysql_query($sql);
usleep(500);
$lama += 500;
}
*/
if (!$res)
die("error");
$out = "";
while($row = mysql_fetch_array($res)) {
$out = $out . "<div id=";
if ($row["user"] == $user)
$out = $out . "\"chatme\"";
else if ($row["user"] == "sys")
$out = $out . "\"chatsystem\"";
else
$out = $out . "\"chatother\"";
$out = $out . ">";
$out = $out . date("(h:i:s) ", $row["time"]);
$out = $out . $row["user"];
$out = $out . ": " . stripslashes($row["data"]);
$out = $out . "</div>";
$last = $row["time"];
}
$_SESSION["lmsgtime"] = $last;
echo $out;
?>
send.php
<?php
$time = time();
session_start();
include "con.php";
$data = mysql_real_escape_string($_GET["msg"]);
$user = mysql_real_escape_string($_SESSION["user"]);
mysql_select_db($dbname, $con);
$sql = "INSERT INTO chats VALUES ('$time', '$user', '$data')";
$res = mysql_query($sql);
if (!$res)
die("err");
else
echo "ok";
$lho = fopen("wew.xt", "w");
fprintf($lho, "%d\n", $time);
fclose($lho);
?>