使用 PHP 向客户端发送多个 HTTP 2.0 流

Posted

技术标签:

【中文标题】使用 PHP 向客户端发送多个 HTTP 2.0 流【英文标题】:Sending multitiple HTTP 2.0 streams to client using PHP 【发布时间】:2015-04-10 05:17:01 【问题描述】:

HTTP 2.0 中的多流方法似乎很有趣。我想知道,今天是否可以与 php 一起使用?

它可以通过从不同的数据库查询发送不同的站点内容来加速 php 应用程序。

编辑:我的示例是通过在 PHP 中使用多线程同步线程(有很多很好的库可以做到这一点)同时获取 2 个或更多站点内容并将其发送出去(不是程序执行)。

【问题讨论】:

我看到您已授予赏金但未接受答案,我没有解决您的部分问题吗? 据我所知,SPDY 是 google 的一个想法,但它不是 HTTP 2.0。而且它也被弃用了。一年后将从主流浏览器中移除。 正确,但是 http2 规范仅在几天前完成,它基于谷歌的 spdy。因此 mod_spdy 与您今天将要来的一样接近。 thenextweb.com/insider/2015/02/18/… 【参考方案1】:

我相信今天在某种程度上是可能的。你可以configure mod_spdy with PHP。据称,您可以通过 this article 的 Apache 配置中的标头来宣传 SPDY 功能。

Header set Alternate-Protocol "443:spdy/2"

Compatible browsers 应该在此时开始利用 SPDY 的优势,而无需更改您的 PHP 代码;但是我认为这只是意味着您可以放弃 CSS sprites、CSS / JS 文件合并和域分片等。基本上所有在使用传统方法优化网站时可以减少 HTTP 查询数量的事情。

至于你的实际问题,

从不同的数据库查询发送不同的站点内容

使用支持 SPDY 的服务器优化 PHP 站点的一个想法是通过大量 AJAX 请求,因为它们都将通过单个 HTTP 连接神奇地中继(理论上)。同样,一旦您使用 PHP 配置了 mod_spdy 服务器,这将需要进行一些测试,但根据我读过的所有内容,我认为可能是这种情况。有关更多信息,请参阅此线程和 answer。

..如果你有一个高度交互的 AJAX-heavy 应用程序,其中包含许多 小查询和更新被穿梭,SPDY 提供了一个 优雅的解决自然阻抗失配的交互性和 HTTP。

我不确定是否有可用的 HTTP2 模块,但假设很快就会出现。在那之前,我的理解是 mod_spdy 是 Apache 的方式。还有options for nginx 和其他可能的 PHP 解决方案服务器。

【讨论】:

mod_spdy 绝对是在 PHP 中快速实现的方法。本指南展示了如何从 mod_php 切换到 mod_fcgid 来处理 PHP 调用和 mod_spdy developers.google.com/speed/spdy/mod_spdy/php 谢谢@greg_diesel,这也是我在上面链接的那个。昨晚搜索了一个多小时后,我真的没有找到关于这个主题的太多信息。似乎是时候启动一个 mod_spdy 虚拟机并写一篇博文了!【参考方案2】:

虽然不是 HTTP/2 - PHP 能够支持 WebSockets,这将允许您从不同的数据库查询发送不同的站点内容。

有一个用于 PHP 的名为“Ratchet”的 WebSocket 库,它可以实现您想要做的事情:)

HTH

【讨论】:

我想在一个连接中发送不同的数据,如 HTTP 2.0 中所指定。但我认为您的意思是为每个数据发送一个 websocket/连接?【参考方案3】:

Jetty Web 服务器支持 HTTP2 和 fastCGI 到 PHP。例如,我们的主站点 webtide.com 在 jetty 后面运行 wordpress。

还要注意,Jetty 使用的异步代理机制意味着即使使用了 HTTP2 推送等功能,它们也会并行发生。例如,Jetty 可能决定推送几个关联的资源,它们将被异步和并行调度到 word press。

【讨论】:

以上是关于使用 PHP 向客户端发送多个 HTTP 2.0 流的主要内容,如果未能解决你的问题,请参考以下文章

从 php 服务器向 ios 设备发送多个推送通知

OAuth 2.0 PHP客户端和服务器示例

使用客户端软件向服务端php程序发送post数据,php接受三种方法

从服务器向java中的多个客户端发送消息

使用 Wininet 发送多个 Http 请求

HTTP 2.0 服务器推送技术的创新