Php 连续ajax请求中的性能问题?
我创建了一个类似这样的ajax聊天应用程序,用于每秒检查和获取消息。而且效果很好Php 连续ajax请求中的性能问题?,php,ajax,Php,Ajax,我创建了一个类似这样的ajax聊天应用程序,用于每秒检查和获取消息。而且效果很好 function get_messages(user_id) { $.ajax({ type : "POST", url : "messages/get_messages", cache : false, data : { user_id : user_id }, success : fu
function get_messages(user_id) {
$.ajax({
type : "POST",
url : "messages/get_messages",
cache : false,
data : {
user_id : user_id
},
success : function(data) {
if(data != '') {
var obj = $.parseJSON(data);
var messages = obj.messages;
}
}
});
setTimeout(function() { get_messages(user_id) }, 1000);
}
我的问题是,当很多人经常使用这个应用程序时,每秒都会向服务器发送Ajax请求,这样做会不会有性能问题或服务器问题。这样做的最佳实践是什么
感谢您的宝贵建议:)进行此类聊天的最佳方式是将“聊天窗口”恰当地称为
,并与脚本保持永久连接,该脚本将继续运行,并向客户端提供新消息,这样您就不必用AJAX请求淹没服务器。这可以通过在打印新内容后调用ob\u flush()
(只是为了确保)和flush()
来实现,从而使客户端立即接收更新。但首先,您必须通过进行一些设置来准备PHP以使其正常运行:
ini_set('zlib.output_compression', 'off');
ini_set('output_buffering', 'off');
set_time_limit(0);
如果要使用会话,请不要忘记会话已锁定以防止并发写入,因此在从$\u SESSION
收集所需信息后,必须使用SESSION\u write\u close()
释放会话,否则用户将无法发布消息等
如果聊天窗口空闲超过几分钟,脚本还应该检查是否处于非活动状态,并向客户端输出一些内容。它防止浏览器终止连接。它不必是任何可视的,像
这样的注释就可以了
现在,你从哪里得到新消息?有几个选项可供选择:
fseek()
结束。循环检查其!feof()
每秒读取几次以从中读取新行(如果有)。当用户发送新消息时,您只需将此消息附加到文件中,技巧就完成了使用常规Ajax/Php执行此任务并不可取。正如您所说的,如果有很多用户,每个用户每秒都会查询数据库 这会给服务器带来太多的负载,用户之间无法进行实时通信 我建议您使用node.js完成此任务。要使其跨浏览器兼容,您需要使用node.js框架,即socket.io 最后的结论是,使用node.js 您可以学习node.js 网上有很多很好的教程。
lynda.com也有非常好的node.js教程简短回答是的。当您每秒为每个用户创建一个HTTP请求时,会有一个很大的性能问题。如果可以的话,可以考虑使用套接字。在套接字上附上LeeIs,但是如果这是不可能的,请确保JSON订阅是由MyCHACHE或类似的方法创建的,它们都是HTML编写的,所以它们也是可缓存的。确定工作流程中“昂贵”的部分(数据库IO等)并尽量减少发送内容这不是一个简单的问题。这取决于连接的用户数量。如果有1个用户“连接”,每秒1个ajax调用不是问题,但是如果有1000个或更多用户“连接”到tchat,这可能是一个大问题。我也推荐socket。为此,你可以试试pusher.com