ajax多线程

时间:2010-05-26 15:06:02

标签: php javascript ajax multithreading

可以用ajax来实现真正的多线程吗?如果能,怎么做? 请给我一些相关的信息,网站或书籍。 谢谢〜!

2 个答案:

答案 0 :(得分:15)

这取决于“多线程”的含义。

Javascript代码明显是单线程的。没有Javascript代码会中断当前在同一页面上执行的任何其他Javascript代码。 AJAX(XHR)请求将触发浏览器执行某些操作,并且(通常)在完成时调用回调。

在服务器上,每个Ajax请求都是一个单独的HTTP请求。其中每个都将在自己的线程上执行。根据Web服务器配置,它们甚至可能无法在同一台计算机上执行。但即使调用相同的脚本,每个PHP脚本实例也将完全独立。本身没有共享状态。

现在,浏览器通常会限制页面可以基于每个主机同时进行的Ajax请求数量。这个数字通常为2.我相信你可以改变它,但由于大多数人都有默认值,你必须假设它将是2.在此之前,更多的请求将排队,直到现有请求完成。这可能导致不得不做诸如创建多个主机名之类的烦人事情,例如req1.example.com,req2.example.com等。

一个例外是会话,但它们不是多线程的。启动会话将阻止尝试启动完全相同会话的所有其他脚本(基于cookie)。这是您需要最小化会话打开时间的一个原因。可以说你可以使用数据库或像memcache这样的东西来破坏脚本间的通信,但它并不是PHP的真正含义。

PHP最适合用于简单的请求处理。收到请求。它被处理并返回响应。该响应可以是HTML,XML,文本,JSON或其他。请求可以是来自浏览器的HTTP请求或AJAX请求。

在可能的情况下,每个请求 - 响应周期都应被视为单独的实体。

使用的另一种技术是长轮询。 HTTP请求将发送到服务器,并且可能不会长时间返回。这用于基于Web的聊天和其他“服务器推送”类型方案。有时会在不结束请求的情况下刷新部分响应。

最后一个选项(至少在Unix / Linux上)是PHP可以产生进程,但这似乎不是你所指的。

那你到底想要做什么呢?

答案 1 :(得分:3)

你实际上不能多线程,但很多大型网站所做的是刷新页面的输出,然后使用Ajax动态加载其他组件,以便用户即使在浏览器仍在请求时也能看到内容新的消息。它是一种很好的技术,但是,就像其他一切一样,你需要小心使用它。