gpt4 book ai didi

javascript - jQuery setTimeout ajax 递归函数在即时消息程序中短暂抛出错误

转载 作者:行者123 更新时间:2023-11-30 06:26:55 26 4
gpt4 key购买 nike

正如标题所说,我正在使用 jquery、ajax、mysql 和 php 编写一个即时消息程序。目前,我有一个数据库,其中包含一个包含字段的表“switchboard”

mid*, from, to, message, timestamp, read

我有一个函数使用 setTimeout 每隔 1 到 3 秒递归检查一次新的未读消息,如下所示:

function get_new_messages(){
if( $('input[name="from"]:checked').val()
&& $('input[name="to"]:checked').val()
&& ready) {

ready=false;
//ajax call
$.ajax({
url: 'chatAjax.php',
type: 'POST',
data: {
checker_from:$('input[name="from"]:checked').val(),
check_to: $('input[name="to"]:checked').val()},
success: function(data){
$('#chat_window').append(data);
ready=true;

setTimeout(get_new_messages,1000);
},
error: function(){
ready=true;
setTimeout(get_new_messages,3000);
}
}
);
} else{
setTimeout(get_new_messages,3000)
}
}

现在我只是在测试,所以 checker_from 和 check_to 对应于包含用户名的单选按钮。我尝试使用两个浏览器窗口将消息从一个窗口发送到另一个窗口,但是,一段时间后,控制台显示一致的 POST 失败。这是内存泄漏还是其他原因。任何帮助将不胜感激

最佳答案

请考虑使用 Node.js 和 Socket.IO。它更有效率。 My book详细介绍了如何执行此操作,但网络上有许多 Node/Chat 演示。您可以只将 Node 用于聊天服务器,将 PHP 用于其他一切。

您看到 POST 错误的原因可能是由于您正在进行的持续轮询。浏览器通常对给定服务器的并发连接数有限制。传统上,一个域被限制为 2 个并发连接,尽管现在某些浏览器(我想是 Chrome)已经改变了。我怀疑当 POST 开始相互“运行”并超过限制时,您会看到错误。此外,像这样的轮询将很快杀死多用户系统中的服务器。

您需要的不是不断轮询,而是处理推送消息的东西,例如网络套接字和长轮询回退。 Socket.IO 和 Strophie 库提供了这一点。我有使用 Strophie/XMPP 的经验 - 我可以确认它要复杂得多。 Socket.IO 很容易扩展到每台服务器数千(或数万)。您目前正在寻求的解决方案远没有可扩展性:)

关于javascript - jQuery setTimeout ajax 递归函数在即时消息程序中短暂抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533597/

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