我目前正在开发一个即时通讯系统。但是,我在优化方面遇到了问题。下面是我目前的代码:
<script>
setInterval('load_messages()', 500);
function load_messages(){
$('#messages').load('loadMessages.php');
}
</script>
除此之外,最好使用 AJAX 请求来只请求在定义的时间戳之后的消息。有没有一种方法可以将数据包从发送方的页面传递到接收方以进行刷新,从而避免垃圾邮件数据库。下面是一个模式,解释我想做的事情:
在php、apache或javascript中有什么方法可以做到这一点吗?
感谢阅读
1条答案
按热度按时间9udxz4iz1#
您使用的技术称为短轮询。它基本上是向服务器发送垃圾邮件,直到服务器有新的内容显示给您。看起来像这样:
正如您自己所理解的,这确实是低效的;我不知道还有哪个网站还在使用短投票。
你还有其他的选择。最简单的一个(假设你使用的是PHP)是长轮询。基本上,你发送一个请求,服务器只是暂停请求,一旦有新的消息到来,服务器就发回响应。这样你就可以立即得到消息,而不必发送那么多消息:
然而,Apache通过为每个请求创建一个新的线程来处理并发请求。因此,如果您有两个用户在聊天,这没问题。但是假设您有很多房间,总共有100,000个用户在长时间轮询您的服务器。您的服务器可能无法处理那么多线程,并且会崩溃。(NodeJS由于其事件驱动的架构和内置的异步性而在实时应用程序中非常流行。)
但还有其他更好的选择:
**您的上下文:**SSE在PHP中很容易实现,不需要额外的库;另一方面,Websockets的设置有点复杂(可能需要像rachet这样的第三方库),但由于它的工作性能很好,我可能会考虑这样做。
**您的问题:**是否有一种方法可以将数据包从发送者的页面传递到接收者以进行刷新,从而避免垃圾邮件发送到数据库? 如果我准确地回答您的问题,SSE。