채팅 앱을 코딩했습니다. 모든 것이 잘 작동합니다. 하지만 지연된 응답이 있습니다.jQuery - 새 메시지 가져 오기를 지연합니다.
코드 :
var lastMsgID = '0';
$(document).ready(function(){
$("#submitmsg").click(function(){
var clientmsg = $("#usermsg").val();
$.post("jqpost.php", {usermsg: clientmsg });
$("#usermsg").attr("value", "");
return false;
});
setTimeout (poll, 500);
//poll();
}
);
function poll(){
$.ajax({
url: "jq.php",
type: "GET",
data: "mid=" + lastMsgID,
dataType: "json",
async: true,
cache: false,
timeout: 30000,
complete: poll,
success: function(data){
//we got the msgs and will be displaying it... and update the variable 'lastMsgID' with the last id
}}
);
}
서버 측 (PHP) : // DB를 쿼리를 $ 결과 = $ mysqli-> 쿼리 ($의 SQL);
$wait_start = time();
$wait_current = 0;
while ($wait_current < 20 && $result->num_rows == 0)
{
usleep(200000); // 0.2 seconds
$result = $mysqli->query($sql);
$wait_current = time() - $wait_start;
}
if($result->num_rows > 0)
{
//echo the new msgs...
}
문제는 내가 메시지를 보낼 때, 그것은 폴링을 통해 (새로운 MSG를 함께)을 받기 위해 약 9 ~ 15 초 정도 걸릴 것입니다.
Firebug에서 확인한 결과 "jqpost.php"에 대한 POST가로드 아이콘을 표시하고 동시에 poll()에 의한 GET 요청이로드 아이콘을 표시한다는 것을 알게되었습니다. 나는 그들이 동기 모드에 있거나 응답을 기다리고 있다고 생각한다. 하지만 $ .ajax는 비동기 모드로 설정되어 있습니다!
저는이 jQuery를 처음 사용합니다. 그래서 나는이 어리석은 질문을 한 것을 용서해주십시오. :) 나는 이미 코드와 다른 것들을 변경하여 디버깅을 시도했다. 그러나 성공하지 못했습니다. 그래서 여기에 게시했습니다.
는 ... 감사편집 :
jqpost.php 코드 :
는if(isset($_SESSION['chatuser']))
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!isset($_POST['usermsg']) || empty($_POST['usermsg']))
exit('Error');
$stmt = $mysqli->prepare("INSERT INTO chat_tblMsg(m_name , m_uid , m_msg , m_time) VALUES (? , ? , ? , CONVERT_TZ(NOW(), '-04:00' , '+05:30'))");
$stmt->bind_param('sss', $_SESSION['chatuser']['uname'], $_SESSION['chatuser']['uid'], trim($_POST['usermsg']));
/* execute prepared statement */
$stmt->execute();
/* close statement and connection */
$stmt->close();
/* close connection */
$mysqli->close();
}
}
당신이하십시오 jqpost.php 줄 수 있습니까? 아마 그 문제가 거기에서 오는 것입니다. – fflorent
그래 .. 내 첫 번째 게시물을 편집하고 그 코드도 추가했습니다 :) –
나는 이것을 오해하고 있을지 모르지만 지연이있는 이유를 묻고 있습니까? 그렇다면 의도적으로 usleep() 호출을 PHP에 넣고 있습니까? 또한 원래 게시물의 $ sql은 무엇입니까? 데이터베이스 호출 속도가 느립니다. $ SQL 쿼리가 얼마나 느린 지 시간을 잰 적이 있습니까? –