Sha256: 290390278319fe93b7002ee525605cf3aa5ec30f15f06f4b0edd323ac628cbc9
Contents?: true
Size: 807 Bytes
Versions: 9
Compression:
Stored size: 807 Bytes
Contents
# frozen_string_literal: true ## # The middleware wraps every request in a separate Fiber. It should always be on the top of the middleware stack, # as it implements a custom defer protocol, which may break middlewares located above. # class Rage::FiberWrapper def initialize(app) Iodine.on_state(:on_start) do Fiber.set_scheduler(Rage::FiberScheduler.new) end @app = app end def call(env) fiber = Fiber.schedule do @app.call(env) ensure # notify Iodine the request can now be resumed Iodine.publish(Fiber.current.__get_id, "", Iodine::PubSub::PROCESS) end # the fiber encountered blocking IO and yielded; instruct Iodine to pause the request if fiber.alive? [:__http_defer__, fiber] else fiber.__get_result end end end
Version data entries
9 entries across 9 versions & 1 rubygems