当前位置: 首页 > 面试题库 >

Facebook聊天如何避免服务器连续轮询?

佴阳辉
2023-03-14
问题内容

我试图了解Facebook的聊天功能如何在不持续轮询服务器的情况下接收消息。

Firebug向我展示了一个GET XmlHttpRequest,它一直坐在那里,等待服务器的响应。5分钟后,此操作永不超时。

他们如何防止超时?

AJAX请求可以无限期地呆在那里,等待响应吗?

我可以使用JSONRequest吗?我在json.org上看到了这一点:

JSONRequest旨在支持双工连接。这允许服务器可以在其中异步启动传输的应用程序。这是通过同时使用两个请求来完成的:一个发送请求,另一个请求接收。通过使用timeout参数,可以使POST请求处于待处理状态,直到服务器确定它有及时的数据要发送为止。

或者,除了使用JSONRequest之外,还有另一种方法让AJAX呼叫就在那儿等待吗?


问题答案:

Facebook使用一种现在称为Comet的技术将消息从服​​务器推送到客户端,而不是让客户端轮询服务器。

有多种方法可以实现,XMLHttpRequest长轮询只是一种选择。该方法背后的原理是,客户端发送一个普通的XMLHttpRequest,但是服务器直到某个事件发生(例如另一个用户发送一条消息)时才响应,因此客户端被迫等待。当客户端收到响应(或请求超时)时,客户端仅创建一个新请求,以使该服务器始终有一个打开的请求。



 类似资料:
  • 主要内容:服务端程序,客户端程序本节将带领大家结合咱们前面所学的知识开发一个聊天的示例程序,它可以在几个用户之间相互广播文本消息。 服务端程序 服务端程序中包含 4 个 goroutine,分别是一个主 goroutine 和广播(broadcaster)goroutine,每一个连接里面又包含一个连接处理(handleConn)goroutine 和一个客户写入(clientwriter)goroutine。 广播器(broa

  • 问题内容: 我在Heroku服务器上托管了一个网站( 我是Heroku btw的新用户 ),并且由于它是免费软件包,因此在 闲置30m 后便 进入 休眠 状态 ,并在用户点击它后再次将其投入使用,大约需要7秒才能成功。 我正在考虑运行nodejs作业或每隔29m就会打开网站的一次作业,以使服务器永不休眠,最初,我得到的是这样的内容: 注意:那只是在浏览器中打开它,而不是关闭它。 首先,这样做是否合

  • 我正在使用PHP,MySql和Node.js(socket.io实时聊天)像facebook这样的聊天应用程序。问题是当20个人开始聊天时,我的服务器负载会上升到10-15。我只是在发送方插入消息,并向接收方发送消息ID,接收方从数据库检索消息信息。我有一个Centos服务器有4个物理和4个逻辑核心(共8个核心)和16GB内存。我的网站是在zencart中构建的,当我在静态页面上按f5 1分钟时,

  • 我需要在netty中有一个客户机/服务器通信,用于我的项目目的之一。所以我刚开始用一个handsOn来改进,我正在学习netty,我是一个初学者。 我尝试了一个简单的客户端服务器与Netty聊天。 客户端和服务器正在初始化,我可以看到服务器能够获得用于建立连接的客户端管道,但是当客户端发送消息时,它没有进入ServerAdapterHandler的messageReceived部分。下面是我的源代

  • 8.10. 示例: 聊天服务 我们用一个聊天服务器来终结本章节的内容,这个程序可以让一些用户通过服务器向其它所有用户广播文本消息。这个程序中有四种goroutine。main和broadcaster各自是一个goroutine实例,每一个客户端的连接都会有一个handleConn和clientWriter的goroutine。broadcaster是select用法的不错的样例,因为它需要处理三种

  • 你好,我有一个基于spring boot的后端,我们正在使用自己的库将JPA实体转换为DTO的(库基于反射工作)。问题是,我们将服务层直接注入到一些映射器中。假设我有一个和。UserDto有一个名为avatar的字段,化身存储在中。因此,为了构建UserDto,我们使用如下代码。 我不喜欢这种方法,因为Mapper必须对服务层一无所知。但是,这个映射器也被其他映射器使用。如果我想返回一个Order