客户端可以使用 HTTP/2 协议向服务器推送消息吗?

Posted

技术标签:

【中文标题】客户端可以使用 HTTP/2 协议向服务器推送消息吗?【英文标题】:Can a Client push messages to the server in HTTP/2 Protocol? 【发布时间】:2016-07-26 20:22:24 【问题描述】:

我的问题很简单。我希望看到我当前的客户端/服务器系统在 HTTP/2 上运行。

因此我需要知道客户端是否能够将消息推送到服务器。这与 KeepAlive 结合起来对我的应用程序来说是一个很大的好处。

问候!

【问题讨论】:

如果我正确理解您的需求,那么一切都应该自动运行。例如,标准的html页面可以有多个<script><link><img>等元素。让我们将元素指向支持 HTTP/2 的同一 Web 服务器。 Web 浏览器将打开连接并向服务器发送 GET 请求。多个 GET 请求之间会有很小的超时,但是第二个和以后的所有请求都不会等待上一个 GET 请求的响应,并且通信的时间线将与合并数据的一个请求几乎相同. 感谢您的回答。应用程序不得用于为 Web 浏览器提供 HTML 数据。我想让服务器客户端连接在 HTTP/2 Protocoll 上运行以通信和共享数据。希望这对你有意义 不客气!您在哪个操作系统上使用哪个 Web 服务器?通常,您需要使用最新版本的 Web 服务器和 OpenSSL 等依赖组件。您需要非常仔细地配置 TLS,然后所有相对现代的 Web 浏览器将自动使用 HTTP/2。它是 HTTP/2 的复用特性。从客户端到服务器的相同请求将更快地发送。我完全同意 rkosegi:您使用了错误的术语“客户端可以将消息推送到服务器”,因为“推送”将用于仅用于从服务器发送数据,客户端未明确请求 . 好吧,我错了。我想使用基于 Java 的 HTTP/2 服务器。架构应如下所示。 1)服务器运行并等待。 2) 客户端连接(HTTP/2 管道现在应该打开) 3) 客户端发送登录凭据 4) 正确登录后,服务器接受来自客户端的每个传入流。该计划是通过管道从客户端发送消息到服务器。服务器应该能够处理这些消息。 @MrNoSql :对我来说,这听起来像是您将 http/2 滥用于某些并非严格设计的东西。看看 websocket、JMS(各种传输)或 MQTT。我认为它们更适合您刚刚描述的语义。 【参考方案1】:

Push messages to server 等价于made regular request to server

所以是的,您可以像在 http 中一样在 http2 中执行此操作。

【讨论】:

您好,感谢您的评论。并且每个 Client-Push 都会经过 Pipeline? 你能解释一下'client-push'是什么意思吗? HTTP2 在设计上使用流水线。 我的意思是当我作为客户端打开到服务器的连接时。管道打开并且可以配置为保持活动状态。问题是客户端是否可以使用管道并以这种方式将消息传输到服务器。 你想模仿 websocket 吗? 抱歉回复晚了。是的,但通过 HTTP2 协议

以上是关于客户端可以使用 HTTP/2 协议向服务器推送消息吗?的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket消息推送

iOS消息推送APNS(Java实现HTTP/2协议发送)

iOS消息推送APNS(Java实现HTTP/2协议发送)

iOS消息推送APNS(Java实现HTTP/2协议发送)

PHP+SSE服务器向客户端推送消息

PHP+SSE服务器向客户端推送消息