gpt4 book ai didi

php - 连续 ajax 请求中的性能问题?

转载 作者:搜寻专家 更新时间:2023-10-31 20:44:05 24 4
gpt4 key购买 nike

我创建了一个类似这样的 ajax 聊天应用程序来每秒检查和获取消息。它工作正常。

  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 请求时,这样做是否存在任何性能问题或服务器问题,.这样做的最佳做法是什么??

感谢您的宝贵建议:)

最佳答案

进行此类聊天的最佳方式是将“聊天窗口”正确地表示为 <iframe>与将保持运行并向客户端提供新消息的脚本的永久连接,这样您就不必用 AJAX 请求使服务器不堪重负。这可以通过调用 ob_flush() 来实现。 (只是为了确定)和 flush()打印新内容后,使客户端立即收到更新。但首先您必须通过一些设置让 PHP 正常运行:

ini_set('zlib.output_compression', 'off');
ini_set('output_buffering', 'off');
set_time_limit(0);

如果您要使用 session ,请不要忘记锁定 session 以防止并发写入,因此在从 $_SESSION 收集到您需要的信息后您必须使用 session_write_close() 释放 session 否则用户将无法发布消息等。

如果聊天窗口保持空闲超过几分钟,您的脚本还应该检查不活动并向客户端输出一些内容。它可以防止连接被浏览器终止。它不必是任何视觉的东西,像 <!-- keep alive --> 这样的评论会做的。

现在,您将从哪里获得新消息?有几个选项可以做到这一点:

  1. 套接字。您可以让此聊天服务器应用程序在服务器端运行,所有聊天窗口 PHP 脚本都将连接到该服务器端以接收新的聊天行。当用户提交新消息时,它会发送到聊天服务器并广播到聊天窗口脚本。这个聊天服务器也可以安全地用 PHP 编写!

  2. 一个文件。最简单的方法。每个聊天窗口 PHP 脚本都以只读方式打开同一个文件,并且 fseek()到尽头。循环检查其是否为 !feof()每秒几次以从中读取新行(如果有)。当用户发送一条新消息时,您只需将这条消息附加到文件中,技巧就完成了。

  3. SQL。不推荐,因为每个聊天窗口 PHP 脚本都会打开与 RDBMS 的新连接并最终达到其限制,但您可以尝试不使用 RDBMS 的 SQLite。

关于php - 连续 ajax 请求中的性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15400917/

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