{"id":7590,"date":"2015-05-21T09:34:44","date_gmt":"2015-05-21T07:34:44","guid":{"rendered":"http:\/\/daniel.haxx.se\/blog\/?p=7590"},"modified":"2024-05-21T23:49:26","modified_gmt":"2024-05-21T21:49:26","slug":"status-update-http2-multiplexed-uploads","status":"publish","type":"post","link":"https:\/\/daniel.haxx.se\/blog\/2015\/05\/21\/status-update-http2-multiplexed-uploads\/","title":{"rendered":"status update: http2 multiplexed uploads"},"content":{"rendered":"\n<p>I wrote a <a href=\"http:\/\/daniel.haxx.se\/blog\/2015\/05\/04\/http2-in-curl-status-update\/\">previous update about my work on multiplexing in curl<\/a>. This is a follow-up to describe the status as of <em>today<\/em>.<\/p>\n\n\n\n<p>I&#8217;ve successfully used the <a href=\"https:\/\/github.com\/bagder\/curl-http2-dev\/blob\/master\/http2-upload.c\">http2-upload.c<\/a> code to upload 600 parallel streams to the test server and they were all sent off fine and the responses received were stored fine. <a href=\"https:\/\/httpwg.github.io\/specs\/rfc7540.html#SETTINGS_MAX_CONCURRENT_STREAMS\">MAX_CONCURRENT_STREAMS<\/a> on the server was set to 100.<\/p>\n\n\n\n<p>This is using <a href=\"https:\/\/github.com\/bagder\/curl\">curl git master<\/a> as of right now (thus scheduled for inclusion in the pending curl 7.43.0 release).\u00a0 I&#8217;m not celebrating just yet, but it is looking pretty good. I&#8217;ll continue testing.<\/p>\n\n\n\n<p>Commit <a href=\"https:\/\/github.com\/bagder\/curl\/commit\/b0143a2a33f0e57\">b0143a2a3<\/a> was crucial for this, as I realized we didn&#8217;t store and use the read callback in the easy handle but in the connection struct which is completely wrong when many easy handles are using the same connection! I don&#8217;t recall the exact reason why I put the data in that struct (I went back and read the commit messages etc) but I think this setup is correct conceptually and code-wise, so if this leads to some side-effects I think we need to just fix it.<\/p>\n\n\n\n<p>Next up: more testing, and then taking on the concept of server push to make libcurl able to support it. It will certainly be a subject for future blog posts&#8230;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"http:\/\/curl.haxx.se\/\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"110\" src=\"http:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2007\/09\/curl-keywords300.jpg\" alt=\"cURL\" class=\"wp-image-64\" title=\"cURL\"\/><\/a><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>I wrote a previous update about my work on multiplexing in curl. This is a follow-up to describe the status as of today. I&#8217;ve successfully used the http2-upload.c code to upload 600 parallel streams to the test server and they were all sent off fine and the responses received were stored fine. MAX_CONCURRENT_STREAMS on the &hellip; <a href=\"https:\/\/daniel.haxx.se\/blog\/2015\/05\/21\/status-update-http2-multiplexed-uploads\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">status update: http2 multiplexed uploads<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[33,369],"class_list":["post-7590","post","type-post","status-publish","format-standard","hentry","category-curl","tag-curl-and-libcurl","tag-http2"],"_links":{"self":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/7590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/comments?post=7590"}],"version-history":[{"count":7,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/7590\/revisions"}],"predecessor-version":[{"id":24811,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/7590\/revisions\/24811"}],"wp:attachment":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media?parent=7590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/categories?post=7590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/tags?post=7590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}