diff --git a/README.md b/README.md index 4ee490a..7ee6264 100644 --- a/README.md +++ b/README.md @@ -33,15 +33,17 @@ checkout. ("upstream") hub - Support for polling and push-notification for remote topics, with - configurable poll interval + configurable poll interval; this allows *hub chaining*. - Uses HTTP `Link` headers when retrieving a topic to determine canonical hub and topic URLs; does not extract `link` elements from any kind of XML or HTML document, nor does it implement `.host-meta` discovery - - Support for `hub.secret` and `hub.lease_seconds` protocol - parameters + - [WebSocket](https://tools.ietf.org/html/rfc6455)-based + subscriptions to WebSub topics, in addition to the usual + [WebHook](https://en.wikipedia.org/wiki/Webhook)-based + subscriptions. ## Configuration @@ -207,6 +209,39 @@ At the time of writing, no official list of conformance criteria exists; however, there is a draft list of Candidate Recommendation implementation criteria at . +## Codebase Layout + +Files at the toplevel of the git checkout: + + - `COPYING`, `gpl.txt`, `lgpl.txt`: Licensing and copyright information + - `info.rkt`: Racket package control metadata + - `nginx.conf`: Example nginx configuration file, for running RacketMQ behind nginx + +In the `racketmq/` directory are the sources for the RacketMQ server: + + - `hub.rkt`: **Main entry point for RacketMQ server** + - `config.rkt`: Actor that tracks changes in config files + - `protocol.rkt`: Definitions of protocol structures for coordination among RacketMQ actors + - `hub/`: Source code for the main functions of the RacketMQ server + - `hub/static-content.rkt`: Actor serving static content from `htdocs/` + - `hub/subscription.rkt`: Actors implementing downstream WebHook-based subscriptions + - `hub/websocket.rkt`: Actors implementing downstream WebSocket-based subscriptions + - `hub/topic-demand.rkt`: Actor that analyzes a subscription topic + URL, deciding whether it represents a local topic or a remote + topic. + - `hub/local-topic.rkt`: Actor implementing a local RacketMQ topic + - `hub/remote-topic.rkt`: Actors implementing a remote RacketMQ + topic and WebSub subscribers that relay content from upstream + hubs (if any) to downstream subscribers + +The `racketmq/` directory also contains a few other files of interest: + + - `defaults.rktd`: Fully-commented RacketMQ configuration file + - `poke.rkt`: Simple interactive tool for interacting with RacketMQ + - `run`: [Daemontools](https://cr.yp.to/daemontools.html) startup script for the server + - `log/run`: Daemontools logging startup script for the server + - `htdocs/`: Static files to be served by the server + ## Bug Reports Please report issues using this project's Github issues page, diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..67bbd81 --- /dev/null +++ b/TODO.md @@ -0,0 +1,26 @@ + +✓ HEAD for racketmq topic links + +✓ Proper async verification + +✓ Split implementation into multiple modules + +✓ Remove "unbounded" lease duration + +✓ Configurability + +✓ Explain codebase layout in README + +CORS (ugh ugh ugh) + +Secrets + +Allow secret of a subscription to be changed + +Durable subscriptions and other kinds of hub state + +Make second-and-subsequent subscriptions to remote topics behave the same as first subscriptions: + - randomize the first poll of the content + - never do a poll if the poll interval is "none" for the topic as a whole + +Local topic history retention and browsing