8

我正在阅读有关实时网络的信息,并且注意到一句话allow Django to do async responses。到目前为止,我所理解的是,可以通过使用 Ajax 从同一侧发出多个 Http 请求来实现客户端的并行性,但对于服务器来说,这些只是单独的请求,每个请求都在自己的线程中处理。

我如何看待它的工作:

  1. 客户端发送两个请求
  2. 服务器接收它们并在自己的线程中解决它们,然后返回给客户端

什么是异步服务器的概念示例?

4

2 回答 2

11

HTTP 是一种阻塞、同步的协议。这意味着客户端必须等待服务器的响应才能继续。服务器阻止客户端做任何事情;因为客户端必须等待响应通过。浏览器收到响应后,断开连接,然后打开另一个连接,重复该过程,直到获取页面的所有元素以进行显示。

这是网络的状态,也是 HTTP 协议的本质。

Ajax 只是创建了一个后台进程来执行浏览器会执行的操作——它仍然处于阻塞状态,但最终效果是用户仍然可以与客户端交互。浏览器正在显示某些内容并且没有被有效地“阻止”。

“实时”网络允许您拥有一个非阻塞、异步的开放式套接字。异步意味着您不必等待响应返回 - 客户端不会被阻塞。您可以发送多个请求,然后当服务器完成它们时,它会回复。您不必“等待”。

您每天使用的许多东西都是异步的:

  1. 任何聊天应用程序 - 例如 IRC、facebook messenger、whatapp 等。
  2. 与一个非常健谈的朋友的电话交谈(通常,您会等待听到对方的回应,但有些人只是说话和说话......)。
  3. 任何正在流式传输的内容,例如 YouTube。

将其简单地视为“一方不必等待再次开始传输”。

在 Web 中,实时是通过绕过 HTTP 的限制来实现的。这就是WebSockets服务器发送事件 (SES)的用武之地。

第一种是通过 TCP 打开全双工(即可以同时发送和接收)通道的标准方式。

第二个(SES)仍然作为 HTML5 的一部分进行标准化,但它允许服务器将通知推送到客户端,而不是客户端必须轮询服务器以获取事件。因此,不是您发送检查更新的请求,而是服务器会在有更新时告诉您——比如“不要给我打电话,我会打电话给你”。

于 2013-03-17T14:12:34.473 回答
3

这是一个如何工作的概念图,您可以看到服务器端(HTTP Server)正在回答来自 DIV 的异步请求,因此每个答案都可以看作是一个异步答案。

由于答案来自能够以异步方式服务的服务器,因此该服务器可以是体贴的异步服务器。

顺序图

顺便说一句,文章/图表来自 .NET 场景,AJAX 行为是通用的,这就是它在一般视图上的工作方式。

于 2013-03-17T13:59:54.843 回答