Falcore has Moved
The Fitstar fork has tons of updates that break backwards compatibility so we are leaving this repo live for reference of the older interfaces. It will no longer be maintained here, though so you should upgrade to the Fitstar fork.
Falcore is a framework for constructing high performance, modular HTTP servers in Golang.
GoPkgDoc hosts code documentation for this project.
- Modular and flexible design
- Hot restart hooks for zero-downtime deploys
- Builtin statistics framework
- Builtin logging framework
Falcore is a filter pipeline based HTTP server library. You can build arbitrarily complicated HTTP services by chaining just a few simple components:
RequestFiltersare the core component. A request filter takes a request and returns a response or nil. Request filters can modify the request as it passes through.
ResponseFilterscan modify a response on its way out the door. An example response filter,
compression_filter, is included. It applies
gzipcompression to the response if the request supplies the proper headers.
Pipelinesform one of the two logic components. A pipeline contains a list of
RequestFiltersand a list of
ResponseFilters. A request is processed through the request filters, in order, until one returns a response. It then passes the response through each of the response filters, in order. A pipeline is a valid
Routersallow you to conditionally follow different pipelines. A router chooses from a set of pipelines. A few basic routers are included, including routing by hostname or requested path. You can implement your own router by implementing
RequestFilters, but they can be put into pipelines.
Falcore is currently targeted at Go 1.0. If you're still using Go r.60.x, you can get the last working version of falcore for r.60 using the tag
Check out the project into $GOROOT/src/pkg/github.com/ngmoco/falcore. Build using the
go build command.
examples directory for usage examples.
To use falcore to serve HTTPS, simply call
ListenAndServeTLS instead of
ListenAndServe. If you want to host SSL and nonSSL out of the same process, simply create two instances of
falcore.Server. You can give them the same pipeline or share pipeline components.