fusionjs / fusion-cli

Migrated to https://github.com/fusionjs/fusionjs
MIT License
140 stars 37 forks source link

Fusion-cli support for HTTP2 #722

Closed matthewharwood closed 5 years ago

matthewharwood commented 5 years ago

fusion-cli does not support http2

Type of issue

Feature Request

Description

Inside the server-entry.js we are not using http2. I would like fusion-core to support http2

Your environment

lhorie commented 5 years ago

Can you explain your use case? Normally this is handled outside of Node altogether. Assuming this is for a project at Uber, the conversation would relate to Uber's infrastructure. We can chat internally if you prefer.

rtsao commented 5 years ago

HTTP/2 clients usually require TLS which should be terminated at the edge. In a typical scenario, a Fusion app will be deployed behind nginx, which will handle serving HTTP/2. So in general, HTTP/2 is outside the scope of Fusion itself.

matthewharwood commented 5 years ago

Can you explain your use case?

I'm interested in the the performance between a Fusion App Server and Nginx Web Server when using HTTP/1.1 over HTTP/2.

Assuming this is for a project at Uber

Yeah it is.

So in general, HTTP/2 is outside the scope of Fusion itself.

Yeah I understand that HTTP/2 from nginx to client is the best bang for your buck. However, I'm also interested to see the difference (if any) between nginx and fusion app server, when communicating via HTTP/2. For example, if Nginx and the application are not on the same host, it's possible that usage of HTTP/2 would be more efficient thanks to its improved pipelining of requests/responses. Otherwise, I have a hunch (but have not tested) that HTTP/1.1 would be more efficient, due to the complexity of HTTP/2 and that the libraries for HTTP/2, in Node.js, haven't had the years of rigorous optimizing yet.

To both of you, thanks for being on top of this odd request.

lhorie commented 5 years ago

I don't think we'll add support for HTTP/2 in Fusion itself due to the reasons outlined above, but if you're interested in benchmarking, I think you could probably find out what you're looking for by forking fusion-cli and editing entries/server-entry.js to use http2 instead of http, and passing appropriate certs.

For what it's worth, I read some recommendations from Google a while back saying that HTTP/2 push performance can be tricky, yielding entirely opposite levels of performance depending on how congested the network is. A bunch of providers like Heroku and now.sh don't even bother w/ it at the Node.js layer, and I suspect it might be for good reason.

matthewharwood commented 5 years ago

Makes sense! Let's just close this out