An implementation of RFC 1437, the Gopher protocol.
This repository is 2 things:
- A library that implements the Gopher protocol
- An example server that serves Gopher requests
The Gopher protocol consists of 2 phases: request & response.
Like its relative HTTP, clients makes a request for a URI to the server, and the server responds. Unlike HTTP, however, there are no headers, caching, MIME response types, keepalives, etc. This makes the protocol both simpler and less featureful.
A request to a gopher:// server consists of a single line, containing a URI (called a selector):
the server then resolves that request into a response, and renders it back to the client.
A Response can be one of 3 things:
- a menu of further choices a user can make
- a resource (a file, or a another server)
- an error
A copy of the RFC that describes the protocol is included in this repo
Using this library
To use this library, you need to:
- Create a
- Provide it with
Resolver(s) that instruct it how to find content
- Tell the server to listen for requests!
A good example for how this can be done exists in
If you're looking for a more turnkey solution, check out its sister project Port70.
Testing on the application is built using the excellent minitest.cr.
Run tests with