在性能、浏览器实现可用性、服务器负载等方面,HTML5 SSEs和纯粹的Ajax轮询之间是否存在很大差异?从服务器端来看,似乎一个EventSource
只是每隔约3秒钟(尽管我知道时间是有弹性的)就会访问指定的页面。
可以肯定的是,与设置定时器并每隔一段时间进行$.get
相比,在客户端上设置一个EventSource更为简单。但还有别的吗?它发送的标头更少,或者有一些其他的魔法吗?
在性能、浏览器实现可用性、服务器负载等方面,HTML5 SSEs和纯粹的Ajax轮询之间是否存在很大差异?从服务器端来看,似乎一个EventSource
只是每隔约3秒钟(尽管我知道时间是有弹性的)就会访问指定的页面。
可以肯定的是,与设置定时器并每隔一段时间进行$.get
相比,在客户端上设置一个EventSource更为简单。但还有别的吗?它发送的标头更少,或者有一些其他的魔法吗?
服务器发送事件在大多数浏览器中得到了很好的支持, 当然,显著的例外是IE。但是有一对 polyfills(以及一个jQuery插件)可以解决这个问题。
如果您只需要单向通信,则应选择使用服务器发送事件。正如您所提到的,服务器发送事件倾向于在客户端实现时更加简单和清晰。您只需为消息和事件设置侦听器,浏览器会处理低级别的事情,例如重新连接等。在服务器端,也相当容易实现,因为它只使用简单的文本。如果您发送JSON编码的对象,则可以通过JSON.parse()
将它们轻松转换为JavaScript对象。
json_encode()
将字符串、数字、数组和对象转换为正确编码的JSON。其他后端语言也可能提供类似的功能。
max_children
,请参见:“PHP 中的 SSE - Apache 挂起并且不注册/服务任何新请求”→ https://dev59.com/Ncj6oIgBc1ULPQZFQ19N - Avatarmax_children
,请参考: "SSE in PHP - Apache hanging and not registering/serving any new requests" → https://dev59.com/Ncj6oIgBc1ULPQZFQ19N - Avatar