Service for multiplexing many Discord websockets on top of any number of backends. Consists of 2 components: Gateway & State Cache
NOTE: This currently only supports Tatsu's specific use case. More backends will be written in the future as time permits.
A custom ETF parser was written from the ground up. During peak traffic, gateway uses ~4 cores for 720 shards.
State is stored in foundationdb and accessed via the State Cache (cmd/state).
Events are pushed to redis using RPUSH
. The content is the d
key of the event encoded as ETF.
- Ensure you have Go 1.13 or higher.
- Install foundationdb (both the server and clients package).
- Install redis.
- Add a variable in
cmd/gateway/main.go
namedToken
that contains your token. - Enable modules
export GO111MODULE=on
- Run
go build
incmd/gateway
- To run, do
./gateway
incmd/gateway
- To only push certain event types to the event queue, set the
WHITELIST_EVENTS
environment variable e.gWHITELIST_EVENTS=MESSAGE_CREATE,MESSAGE_REACTION_ADD
- Run
go build
incmd/state
- To run, do
./state
incmd/state