/async-fcgi

FastCGI implementation in pure Rust

Primary LanguageRustGNU Affero General Public License v3.0AGPL-3.0

Project Status: Active – The project has reached a stable, usable state and is being actively developed. crates.io Released API docs GitHub GitHub Workflow Status

FastCGI implementation in pure Rust.

The focus is on the webserver/client side, but the application/server side could be added in the future.

Developed for FlashRust Webserver with focus on

  • Vectorized IO and Zero Copy
  • async IO / tokio
  • easy HTTP interfaces

Tested with:

  • Flup (Python)
  • PHP

cargo run --example webserver --features="con_pool"

Features

  • Handle UnixStream and TCPStream transparently
  • reconnect to the FCGI App if a connection is closed
  • Start an FCGI server (exec + env)
  • Support Key-Value Pairs bigger than maximum record size
  • "Full Duplex" connection to the FCGI Server/App (e.g stream STDIN and OUT at the same time)
  • con_pool should handle more than one connection 😅 and load balance
  • A dropped FCGIBody should not block a RequestID and cancel the request
  • Connection should handle overload error from FCGI app
  • Parsing for FCGI application/server side

PullRequests are welcome BTW

Other FCGI Crates

Crate Description Difference to this
fastcgi-client Async (tokio) client Different API
fastcgi Synchronous Server Synchronous. Only Server/App Side
fastcgi-sdk Bindings to the FastCGI SDK Bindings
gfcgi abandoned Only Server/App Side
fcgi Bindings yanked