Protocol::Rack
Provides abstractions for working with the Rack specification on top of Protocol::HTTP
. This would, in theory, allow you to run any Protocol::HTTP
compatible application on top any rack-compatible server.
Features
- Supports Rack v2 and Rack v3 application adapters.
- Supports Rack environment to
Protocol::HTTP::Request
adapter.
Usage
Application Adapter
Given a rack application, you can adapt it for use on async-http
:
require 'async' require 'async/http/server' require 'async/http/client' require 'async/http/endpoint' require 'protocol/rack/adapter' app = proc{|env| [200, {}, ["Hello World"]]} middleware = Protocol::Rack::Adapter.new(app) Async do endpoint = Async::HTTP::Endpoint.parse("http://localhost:9292") server_task = Async(transient: true) do server = Async::HTTP::Server.new(middleware, endpoint) server.run end client = Async::HTTP::Client.new(endpoint) puts client.get("/").read # "Hello World" end
Server Adapter
While not tested, in theory any Rack compatible server can host Protocol::HTTP
compatible middlewares.
require 'protocol/http/middleware' require 'protocol/rack' # Your native application: middleware = Protocol::HTTP::Middleware::HelloWorld run proc{|env| # Convert the rack request to a compatible rich request object: request = Protocol::Rack::Request[env] # Call your application response = middleware.call(request) Protocol::Rack::Adapter.make_response(env, response) }
Contributing
We welcome contributions to this project.
- Fork it.
- Create your feature branch (
git checkout -b my-new-feature
). - Commit your changes (
git commit -am 'Add some feature'
). - Push to the branch (
git push origin my-new-feature
). - Create new Pull Request.
See Also
- protocol-http — General abstractions for HTTP client/server implementations.
- async-http — Asynchronous HTTP client and server, supporting multiple HTTP protocols & TLS, which can host the Rack application adapters (and is used by this gem for testing).