Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么需要异步请求的事件循环(例如,AJAX长轮询)_Ajax_Long Polling_Event Loop - Fatal编程技术网

为什么需要异步请求的事件循环(例如,AJAX长轮询)

为什么需要异步请求的事件循环(例如,AJAX长轮询),ajax,long-polling,event-loop,Ajax,Long Polling,Event Loop,我知道使用普通的线程化Web服务器(例如Apache)进行AJAX长轮询被认为是糟糕的设计……但我真的不明白为什么 是否因为每个longpolling请求比正常请求花费的时间要多得多(从而占用处理器)?如果是这样的话,线程是否真的会占用那么多的开销,以至于在使用前不能保持一段时间的空闲状态?只是澄清一下,AJAX轮询是指客户端javascript发出的AJAX请求没有立即得到满足。相反,服务器会等待,直到它想要将应答推送到客户机,然后使用已经打开的AJAX上下文来这样做。(对吗?) 在处理每个连

我知道使用普通的线程化Web服务器(例如Apache)进行AJAX长轮询被认为是糟糕的设计……但我真的不明白为什么


是否因为每个longpolling请求比正常请求花费的时间要多得多(从而占用处理器)?如果是这样的话,线程是否真的会占用那么多的开销,以至于在使用前不能保持一段时间的空闲状态?

只是澄清一下,AJAX轮询是指客户端javascript发出的AJAX请求没有立即得到满足。相反,服务器会等待,直到它想要将应答推送到客户机,然后使用已经打开的AJAX上下文来这样做。(对吗?)


在处理每个连接的web服务器上,打开的连接将导致为网站上的每个客户端创建一个线程。线程将一直运行,直到客户端关闭连接。当我说“running”时,这仅仅意味着线程存在并且正在占用服务器资源;它可能在sleep()或wait()函数中处于空闲状态。但是它仍然比基于事件的服务器消耗更多的系统资源。

这不是占用处理器,而是阻塞了线程池的连接和线程。然后,服务器必须配置更大的线程池


如果你的应用程序试图与facebook抗衡,那么你将面临一个重大问题,如果它是中小企业内部订购午餐的应用程序,那么没有人会受到伤害。

这不是一个简单的问题,因为它有各种因素可以影响答案

例如,您是否在使用yaws(一个用Erlang编写的web服务器)?那么这就不是一个真正的问题了,除了您正在占用Web服务器上的端口,但是线程不是一个问题

如果您使用的是JavaNewIOAPI,那么每个连接都不会占用一个专用线程,那么线程就不会有问题了

但是,如果你不必要地占用资源,不管你在做什么,那么这是不好的。例如,如果您保持数据库连接打开,进行一些主要的处理,然后写回,这也是一种糟糕的设计

只要您需要资源,就将其保留

如果您要做一些需要相当长时间的处理,那么您可能需要考虑一个更异步的解决方案

例如,给一些唯一的号码,用户可以用它来检查他们的请求是否完成,这样他们就可以关闭计算机,或者随时检查,而不用担心丢失任何东西