socketry / falcon

A high-performance web server for Ruby, supporting HTTP/1, HTTP/2 and TLS.
https://socketry.github.io/falcon/
MIT License
2.64k stars 82 forks source link

pause/resume for tasks #250

Open pschrammel opened 3 months ago

pschrammel commented 3 months ago

I implemented a naive pushback example (https://github.com/socketry/falcon/tree/main/examples/pushback) but it has some quirks:

  1. I had to implement an external loop to check for free slots (this causes a certain delay but doesn't explain delays of 500ms)
  2. the task does a kind of busy waiting (checking if it's allowed to continue). This keeps the async event loop busy (guessing). I think the major delay comes from this waiting loop.

I will try to implement something more nio4r compatible (I'm currently thinking of named pipes and reading to "pause" a task and write to "resume" a task). But perhaps a "pause"/"resume" could be implemented into the framework. currently a task can only be "stopped" and that's it.

ioquatix commented 2 months ago

I feel like in order for this to work generally, it would be better to use a shared source of truth for rate limiting.