Php 使用setInterval从数据库获取最新数据的开销
我正在创建一个消息传递功能,每隔几秒钟从数据库中获取最新消息,基本上这种方法会进行连续的数据库搜索以显示新消息 代码示例:Php 使用setInterval从数据库获取最新数据的开销,php,jquery,sql,ajax,database,Php,Jquery,Sql,Ajax,Database,我正在创建一个消息传递功能,每隔几秒钟从数据库中获取最新消息,基本上这种方法会进行连续的数据库搜索以显示新消息 代码示例: function getLatestActivities(){ var ignoreMessagesArr = $("input.activityId").map(function(){ return this.value; }).get().join(","); var profileId = $("input#userActivityId").val(
function getLatestActivities(){
var ignoreMessagesArr = $("input.activityId").map(function(){ return this.value; }).get().join(",");
var profileId = $("input#userActivityId").val();
$.ajax({
traditional: true,
dataType: "json",
type: "GET", url: "include/process.php",
data:{
getLatestActivity: "true",
toUser: profileId,
ignoreMessages: ignoreMessagesArr
},
success: function(data){
$.each(data, function (i, elem) {
$('.commentMessage').after(elem.value);
});
}
});
}
我想知道的是,是否有一种更有效的方法来执行此任务,即检测数据库中的更改(??)。您可能想了解它是否适合与服务器进行实时通信。然后,您可以设计后端,以便在数据可用时将数据推送到客户端,而不是不断地从前端轮询数据库以获取新信息。您可能希望了解它是否适合与服务器进行实时通信。然后,您可以设计后端,以便在客户端可用时将数据推送到客户端,而不是从前端不断轮询数据库以获取新信息。允许客户端和服务器之间进行双向通信。允许客户端和服务器之间进行双向通信。我认为您应该仅请求插入数据库中的最后一个
ID
,并将其作为参数添加到ajax请求中
process.php
应该处理该ID
以及是否有其他行进行搜索
像
在我看来,您应该只请求数据库中插入的最后一个
ID
,并将其作为参数添加到ajax请求中
process.php
应该处理该ID
以及是否有其他行进行搜索
像
听起来您希望web应用程序在数据库中更改时接收数据,但不一定要实时发送数据。如果需要双向通信,那么您正在寻找Web套接字,它可以帮助您进行服务器端通信,但需要您运行服务器。有一个GoogleCode项目可以为PHP启用WebSockets,名为,但如果我没记错的话,需要在单独的进程中运行它(即从命令行运行)。这样就可以解决服务器部分的问题,但现在您必须担心前端 目前只有FireFox和Chrome完全支持Web套接字。对于那些缺乏支持的浏览器,您需要一个polyfill。因此,Web套接字的实现可能有点混乱,所以请确保这就是您想要做的 另一方面,如果你的webapp只需要接收数据,那么EventSource(又称服务器发送的事件)就是一个不错的选择。在前端,您实际上不必在服务器上做太多工作。同样,对于不太受欢迎的浏览器,您将需要一个polyfill,但这几乎只意味着IE。有关如何使用此功能,请参阅以下网站/教程
如果这些都不起作用,那么有几个选择。持续轮询使用某种重复结构,如setTimeout、long polling(又称挂起get),其中服务器将AJAX请求保持打开状态,直到有新数据,还有无限iframe技巧,甚至可能是连接到服务器以获取数据的Flash插件。听起来您希望web应用程序在数据库中更改时接收数据,但不一定要实时发送数据。如果需要双向通信,那么您正在寻找Web套接字,它可以帮助您进行服务器端通信,但需要您运行服务器。有一个GoogleCode项目可以为PHP启用WebSockets,名为,但如果我没记错的话,需要在单独的进程中运行它(即从命令行运行)。这样就可以解决服务器部分的问题,但现在您必须担心前端 目前只有FireFox和Chrome完全支持Web套接字。对于那些缺乏支持的浏览器,您需要一个polyfill。因此,Web套接字的实现可能有点混乱,所以请确保这就是您想要做的 另一方面,如果你的webapp只需要接收数据,那么EventSource(又称服务器发送的事件)就是一个不错的选择。在前端,您实际上不必在服务器上做太多工作。同样,对于不太受欢迎的浏览器,您将需要一个polyfill,但这几乎只意味着IE。有关如何使用此功能,请参阅以下网站/教程
如果这些都不起作用,那么有几个选择。持续轮询使用某种重复结构,如setTimeout、长轮询(又称挂起获取),服务器将AJAX请求保持打开状态,直到有新数据,还有无限iframe技巧,甚至可能是连接到服务器以获取数据的Flash插件。我正在创建一个社交网络风格的网站,它有一个个人资料评论区和一个聊天区。人们一直在说我应该使用websocket,我只是四处看看,就像你说的一些浏览器缺乏支持一样,我真的希望maximuim支持多个浏览器,就像facebook和twitter。如果你想看到用户在键入内容时输入的内容,那么我会使用websocket。否则,我会使用EventSource接收消息,使用普通AJAX发送消息。我正在创建一个社交网络风格的网站,它有一个个人资料评论区和一个聊天区。人们一直在说我应该使用websocket,我只是四处看看,就像你说的一些浏览器缺乏支持一样,我真的希望maximuim支持多个浏览器,就像facebook和twitter。如果你想看到用户在键入内容时输入的内容,那么我会使用websocket。否则,我将使用EventSource接收消息,使用普通AJAX发送消息。
$query = mysql_query("SELECT `ID` FROM `table` WHERE `ID`>'$lastId'");
$result = mysql_num_rows(); //use that to see if you have new rows.