ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 什么是长轮询,Websockets,服务器发送事件(SSE)和Comet?

2019-09-11 01:31:06  阅读:409  来源: 互联网

标签:long-polling server-sent-events php websocket comet


我曾尝试阅读一些文章,但我对这些概念还不是很清楚.

有人愿意尝试向我解释这些技术是什么:

>长轮询
>服务器发送的事件
> Websockets
>彗星

我每次遇到的一件事是,服务器保持连接打开并将数据推送到客户端.如何保持连接打开,客户端如何获取推送数据? (客户端如何使用数据,也许某些代码可能会有帮助?)

现在,我应该将其中哪一个用于实时应用.我一直听说很多关于websockets(有socket.io [一个node.js库]),但为什么不用PHP

解决方法:

在下面的示例中,客户端是浏览器,服务器是托管网站的Web服务器.

在了解这些技术之前,您必须首先了解经典的HTTP Web流量.

常规HTTP:

>客户端从服务器请求网页.
>服务器计算响应
>服务器将响应发送给客户端.

Ajax轮询:

>客户端使用常规HTTP从服务器请求网页(请参阅上面的HTTP).
>客户端接收所请求的网页并在页面上执行JavaScript,该JavaScript以规则的间隔(例如0.5秒)从服务器请求文件.
>服务器计算每个响应并将其发回,就像普通的HTTP流量一样.

Ajax Long-Polling:

>客户端使用常规HTTP从服务器请求网页(请参阅上面的HTTP).
>客户端接收请求的网页并在页面上执行JavaScript,该页面从服务器请求文件.
>服务器不会立即响应所请求的信息,而是等待有新信息可用.
>当有新信息可用时,服务器会使用新信息进行响应.
>客户端收到新信息并立即向服务器发送另一个请求,重新启动该过程.

HTML5服务器发送事件(SSE)/ EventSource:

>客户端使用常规HTTP从服务器请求网页(请参阅上面的HTTP).
>客户端接收请求的网页并在页面上执行JavaScript,该页面打开与服务器的连接.
>当有新信息可用时,服务器会向客户端发送事件.

>从服务器到客户端的实时流量,这主要是您需要的
>您将需要使用具有事件循环的服务器
>与其他域的服务器的连接只能是with correct CORS settings
>如果你想了解更多,我发现这些非常有用:(article),(article),(article),(tutorial).

HTML5 Websockets:

>客户端使用常规http从服务器请求网页(请参阅上面的HTTP).
>客户端接收请求的网页并在页面上执行JavaScript,该页面打开与服务器的连接.
>当新数据(任何一方)可用时,服务器和客户端现在可以相互发送消息.

>从服务器到客户端以及从客户端到服务器的实时流量
>您将需要使用具有事件循环的服务器
>使用WebSockets,可以从另一个域连接服务器.
>也可以使用第三方托管的websocket服务器,例如Pusherothers.这样你只需要实现客户端,这很容易!
>如果你想阅读更多,我发现这些非常有用:(article),(article)(tutorial).

彗星:

Comet是HTML5之前的一系列技术,它们使用流式传输和长轮询来实现实时应用.阅读更多关于wikipediathis的文章.

Now, which one of them should I use for a realtime app (that I need to
code). I have been hearing a lot about websockets (with socket.io [a
node.js library]) but why not PHP ?

您可以将PHP与WebSockets一起使用,请查看Ratchet.

标签:long-polling,server-sent-events,php,websocket,comet
来源: https://codeday.me/bug/20190911/1802682.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有