多くの試行錯誤の後、データベースとの継続的なサーバー接続を維持することに成功しました。データベースに新しいものがある場合は、コードをチェックしてメッセージを表示します。
このコードで使用されている真のロングポーリング手法があるかどうかを確認して教えてください 。そうでない場合は、どこが間違っているか(ロングポーリングから逸脱)、およびこれを真のロングポーリングにする方法を提案してください。
現在、これらのエラーが発生していますが、それでもデータベースとの継続的な接続を維持しています。
- 毎回、すべてではなく 1 つのメッセージのみがプルされます。(私は .each ループを使用しましたが、長いポーリングを停止します)
10/15 秒ごとに、トークン エラーが表示されます( Parse erroe(syntax error=unexpected token) )。
var last_msg_id = 2; function load_msgs() { $.ajax({ type:"Post", url:"getdata.php", data:{ last_msg_id:last_msg_id }, dataType:"json", async:true, cache:false, success:function(data) { var json = data; $("#commidwin").append(json['msg']); last_msg_id = json["last_msg_id_db"]; setTimeout("load_msgs()", 1000); }, error:function(XMLhttprequest, textstatus, errorthrown) { alert("error:" + textstatus + "(" + errorthrown + ")"); setTimeout("load_msgs()", 15000); } }); }
PHPファイルはこちら
$last_msg_id=$_POST['last_msg_id'];
$last_msg_id_db=1;
while($last_msg_id>$last_msg_id_db){
usleep(10000);
clearstatcache();
$sql=mysqli_query($db3->connection,"SELECT * FROM chat_com where id>'$last_msg_id' ORDER by id ASC");
$sql_m=mysqli_query($db3->connection,"SELECT max(id) as maxid FROM chat_com");
$row_m=mysqli_fetch_array($sql_m);
$last_msg_id_db=$row_m['maxid'];
while($row=mysqli_fetch_array($sql)){
$textt=$row['mesg'];
$last_msg_id_db=$last_msg_id_db;
$response=array();
$response['msg']=$textt;
$response['last_msg_id_db']=$last_msg_id_db;
}
}
echo json_encode($response);