gpt4 book ai didi

javascript - 通过 ajax 不断请求数据库的有效方法是什么?

转载 作者:行者123 更新时间:2023-11-29 02:16:27 25 4
gpt4 key购买 nike

我正在使用 php、mysql、jquery 和 ajax 创建一个实时聊天应用。

我希望了解一种更好的执行实时任务的方法。我希望开始检查新消息、用户是否在线以及用户是否在登录后立即输入内容。

现在,我在 setTimeout 上对 db 进行 ajax 调用以准备好文档中的数据。这是正确的方法吗?或者有什么其他方法可以提高系统性能?

此外,我首先检索要检查的对话 ID 数组。然后我遍历数组以检查是否有新消息或用户是否在输入。我认为这不够有效。必须一个接一个地检查一个对话。有没有一种方法可以单独调用数组中提供的每个对话 ID?

现在看起来像这样:

jQuery(document).ready(function($) {
//check for new message on document ready
if(localStorage.getItem("ckuser") > 0){
var id;
var friends;
$.when(
ckit.getConversation(),//get conversation ids
id = JSON.parse(localStorage.getItem('ids')),
ckit.getFriends(),//get friends
friends = JSON.parse(localStorage.getItem('friends'))
).then(
//new messages
$.each(id, function(k, v){
console.log('checking');
ckit.check(v);
}),

//is online
$.each(friends, function(k, v){
ckit.isOnline(v);
}),

//is typing
$.each(id, function(k, v){
ckit.getIsTyping(v);
})
);

}
}

这是检查新消息、在线用户和正在输入的内容的样子:

 $.when(
[make ajax call for first time]

).then(
(function callMe(){
[make ajax call with updated lastupdate time]
setTimeout(function(){
callMe();
}, 1000);


})()
);

最佳答案

更好的方法是使用套接字。为此,您可以使用像 socket.io 这样的库。另一种选择是使用 JSON 长轮询。

由于您使用的是 PHP,因此您可以查看 elephant.io (使用 socket.io 的 php 实时应用程序库)

Socket.io 使用 WebSockets 来辅助实时通信。它还包括使用传统(长)轮询 ajax 请求的回退机制。

关于javascript - 通过 ajax 不断请求数据库的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com