如何使用持久连接发出http2请求? (任何语言)

时间:2016-05-03 14:34:44

标签: http2

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

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

  

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

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

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

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

2 个答案:

答案 0 :(得分:2)

非持久性连接是过去的遗留物。它们在HTTP / 1.0中使用,但HTTP / 1.1已经移动到默认情况下连接是持久的模型,并且默认情况下HTTP / 2(也是多路复用)继续在该连接模型上持久化。

除了用于开发应用程序的语言外,任何符合HTTP / 2标准的客户端默认使用持久连接。

您只需要在每次发出请求后都没有明确关闭连接的方式使用HTTP / 2客户端库。 通常,这些库使用连接池来保持连接打开,通常直到空闲超时触发为止。

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

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

答案 1 :(得分:0)

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

有没有人可以解决问题?