【问题标题】:How to make http2 requests with persistent connection ? (Any language)如何使用持久连接发出 http2 请求? (任何语言)
【发布时间】:2016-05-27 14:34:02
【问题描述】:

如何使用带有持久连接的http2连接到https://api.push.apple.com

持久连接是为了避免快速连接和断开:

APNs 将快速连接和断开连接视为拒绝服务攻击

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html

使用https://nghttp2.org 用c 编写客户端是唯一的解决方案吗?

(如果该问题应该在另一个 StackExchange 网站上提问,请告诉我)

【问题讨论】:

    标签: http2


    【解决方案1】:

    非持久连接已成为过去。它们在 HTTP/1.0 中使用,但 HTTP/1.1 已经转移到默认连接是持久的模型,并且 HTTP/2(也是多路复用的)继续使用默认持久连接的模型。

    独立于您用于开发应用程序的语言,默认情况下,任何符合 HTTP/2 的客户端都将使用持久连接。

    您只需使用 HTTP/2 客户端库,在每次发出请求后都不会显式关闭连接。 通常,这些库使用一个连接池来保持连接打开,通常直到触发空闲超时。

    当您的应用程序发出 HTTP 请求时,库将选择一个打开的连接并发送请求。当响应到达时,库将不会关闭连接,而是将其放回池中以供下次使用。

    只要研究一下你想使用的库如何允许你在不关闭连接的情况下发出多个请求。

    【讨论】:

      【解决方案2】:

      我也遇到过这个问题! 如果连接空闲很长时间(大约 1 小时),则函数 poll 捕获没有套接字状态更改。即使调用了 on_frame_send_callback,它也总是返回 0。

      有没有人能解决这个问题?

      【讨论】:

      • tcp 0 468 192.168.1.201:41320 17.110.227.100:443 已建立 643/apns2_provider。连接还活着,但是请求提交后,socket状态没有变化(没有数据)。
      猜你喜欢
      • 2017-08-04
      • 2022-11-15
      • 2019-06-26
      • 2018-09-03
      • 2018-11-04
      • 2012-04-22
      • 2019-02-12
      • 2013-12-13
      • 2019-07-31
      相关资源
      最近更新 更多