我正在阅读有关实时网络的信息,并且注意到一句话allow Django to do async responses
。到目前为止,我所理解的是,可以通过使用 Ajax 从同一侧发出多个 Http 请求来实现客户端的并行性,但对于服务器来说,这些只是单独的请求,每个请求都在自己的线程中处理。
我如何看待它的工作:
- 客户端发送两个请求
- 服务器接收它们并在自己的线程中解决它们,然后返回给客户端
什么是异步服务器的概念示例?
我正在阅读有关实时网络的信息,并且注意到一句话allow Django to do async responses
。到目前为止,我所理解的是,可以通过使用 Ajax 从同一侧发出多个 Http 请求来实现客户端的并行性,但对于服务器来说,这些只是单独的请求,每个请求都在自己的线程中处理。
我如何看待它的工作:
什么是异步服务器的概念示例?
HTTP 是一种阻塞、同步的协议。这意味着客户端必须等待服务器的响应才能继续。服务器阻止客户端做任何事情;因为客户端必须等待响应通过。浏览器收到响应后,断开连接,然后打开另一个连接,重复该过程,直到获取页面的所有元素以进行显示。
这是网络的状态,也是 HTTP 协议的本质。
Ajax 只是创建了一个后台进程来执行浏览器会执行的操作——它仍然处于阻塞状态,但最终效果是用户仍然可以与客户端交互。浏览器正在显示某些内容并且没有被有效地“阻止”。
“实时”网络允许您拥有一个非阻塞、异步的开放式套接字。异步意味着您不必等待响应返回 - 客户端不会被阻塞。您可以发送多个请求,然后当服务器完成它们时,它会回复。您不必“等待”。
您每天使用的许多东西都是异步的:
将其简单地视为“一方不必等待再次开始传输”。
在 Web 中,实时是通过绕过 HTTP 的限制来实现的。这就是WebSockets和服务器发送事件 (SES)的用武之地。
第一种是通过 TCP 打开全双工(即可以同时发送和接收)通道的标准方式。
第二个(SES)仍然作为 HTML5 的一部分进行标准化,但它允许服务器将通知推送到客户端,而不是客户端必须轮询服务器以获取事件。因此,不是您发送检查更新的请求,而是服务器会在有更新时告诉您——比如“不要给我打电话,我会打电话给你”。
这是一个如何工作的概念图,您可以看到服务器端(HTTP Server)正在回答来自 DIV 的异步请求,因此每个答案都可以看作是一个异步答案。
由于答案来自能够以异步方式服务的服务器,因此该服务器可以是体贴的异步服务器。
顺便说一句,文章/图表来自 .NET 场景,AJAX 行为是通用的,这就是它在一般视图上的工作方式。