php js 轮询 实时,Javascript-实时网络应用程序的短轮询还是长轮询?

只是为了争辩。

两者都是http请求(xhr),并且至少部分不正确,它使用了更多的服务器资源(完全取决于技术,将在后面解释)。

短轮询。

许多请求在服务器上处理。 创建大量流量(使用资源,但是一旦发送回响应就将其释放):

00:00:00 C-> Is the cake ready?

00:00:01 S-> No, wait.

00:00:01 C-> Is the cake ready?

00:00:02 S-> No, wait.

00:00:02 C-> Is the cake ready?

00:00:03 S-> Yeah. Have some lad.

00:00:03 C-> Is the other cake ready? ..

长时间轮询

一个请求发送到服务器,而客户端正在等待响应(未解决)。 如果服务器使用php / apache,则意味着将生成一个要处理的线程,该线程会保留资源,直到完成。 因此,流量较小,但是您会很快耗尽资源(或者阻塞资源)。 但是,如果使用例如Node(或任何其他异步方法,例如c ++ qt),则可以最大限度地减少资源使用(存储http请求的响应对象,并在工作准备就绪时使用它)

12:00 00:00:00 C-> Is the cake ready?

12:00 00:00:03 S-> Yeah.Hame some lad.

12:00 00:00:03 C-> Is the cake ready?

如果将其与短轮询进行比较,您会发现在短轮询中您可能使用了更多的传输,但是在这3秒钟中,您实际上需要1.5秒钟的处理时间(意味着在两次调用之间可能执行某些操作)。 如果进行长时间轮询,则始终使用相同的资源。 现在通常所有库的php都以4MB内存开头-那么您有一个4-20MB的框架。 假设您有1024MB RAM可用(免费)。 假设您感到悲观,并假设您将在每个php安装实例中使用25 MB。 这意味着您最多只能获取40个长轮询连接脚本。

这恰恰是您可以通过Node提供更多服务的原因,因为Node不会生成其实例(除非您想使用worker等),因此,使用相同的内存,您可能很容易挂起10k连接。 随着它们的到来,以及它们可能被释放时,您将在CPU上出现峰值,但是当它们空闲时,它们就好像不在那里一样(您只为保留在node / c ++中的内存结构付费)。

Websocket

现在,如果您想发送一些东西,无论它们在客户端内外,请使用websockets(ws协议)。 第一次调用是http请求的大小,但后来您只从客户端到服务器(新问题)和服务器到客户端(答案或推送-甚至可以为所有连接的客户端广播)发送消息。 有php websocekts库,但是再次使用一些不同的技术-最好是node或c ++。

有些库(例如socket.io)具有其自己的层次结构,因此当websocket失败时,它可以返回到长轮询或短轮询。

什么时候使用。

简短的轮询-好吧,永远不要^^。

长轮询-可能在您与服务器交换单个呼叫并且服务器在后台进行某些工作时。 同样,当您不再在同一页面上查询服务器时。 另外,当您不使用php作为处理长轮询连接的层时(node / c ++可以是一个简单的中间层)。 请注意,长时间轮询确实很有用,但前提是您必须这样做。

Websocket-您可能会与服务器交换一两个以上的呼叫,或者可能是您未曾预料到/未询问的服务器发出的消息,例如电子邮件通知或其他消息。 您应该根据功能计划不同的“房间”。 拥抱基于事件的javascript特性;]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值