mirror of https://github.com/watcha-fr/synapse
parent
7d15452c30
commit
0b51d970b4
@ -0,0 +1,65 @@ |
|||||||
|
Synapse Architecture |
||||||
|
==================== |
||||||
|
|
||||||
|
As of the end of Oct 2014, Synapse's overall architecture looks like:: |
||||||
|
|
||||||
|
Notifier |
||||||
|
^ | |
||||||
|
| | |
||||||
|
.------------|------. |
||||||
|
| handlers/ | | |
||||||
|
| v | |
||||||
|
| Event*Handler<---------> rest/* <=> Client |
||||||
|
| Rooms*Handler | |
||||||
|
HSes <=> federation/* <==> FederationHandler | |
||||||
|
| | PresenceHandler | |
||||||
|
| | TypingHandler | |
||||||
|
| '-------------------' |
||||||
|
| | | |
||||||
|
| state/* | |
||||||
|
| | | |
||||||
|
| v v |
||||||
|
`--------------> storage/* |
||||||
|
| |
||||||
|
v |
||||||
|
.----. |
||||||
|
| DB | |
||||||
|
'----' |
||||||
|
|
||||||
|
* Handlers: business logic of synapse itself. Follows a set contract of BaseHandler: |
||||||
|
|
||||||
|
* BaseHandler gives us onNewRoomEvent which: (TODO: flesh this out and make it less cryptic): |
||||||
|
|
||||||
|
* handle_state(event) |
||||||
|
* auth(event) |
||||||
|
* persist_event(event) |
||||||
|
* notify notifier or federation(event) |
||||||
|
|
||||||
|
* PresenceHandler: use distributor to get EDUs out of Federation. Very |
||||||
|
lightweight logic built on the distributor |
||||||
|
* TypingHandler: use distributor to get EDUs out of Federation. Very |
||||||
|
lightweight logic built on the distributor |
||||||
|
* EventsHandler: handles the events stream... |
||||||
|
* FederationHandler: - gets PDU from Federation Layer; turns into an event; |
||||||
|
follows basehandler functionality. |
||||||
|
* RoomsHandler: does all the room logic, including members - lots of classes in |
||||||
|
RoomsHandler. |
||||||
|
* ProfileHandler: talks to the storage to store/retrieve profile info. |
||||||
|
|
||||||
|
* EventFactory: generates events of particular event types. |
||||||
|
* Notifier: Backs the events handler |
||||||
|
* REST: Interfaces handlers and events to the outside world via HTTP/JSON. |
||||||
|
Converts events back and forth from JSON. |
||||||
|
* Federation: holds the HTTP client & server to talk to other servers. Does |
||||||
|
replication to make sure there's nothing missing in the graph. Handles |
||||||
|
reliability. Handles txns. |
||||||
|
* Distributor: generic event bus. used for presence & typing only currently. |
||||||
|
Notifier could be implemented using Distributor - so far we are only using for |
||||||
|
things which actually /require/ dynamic pluggability however as it can |
||||||
|
obfuscate the actual flow of control. |
||||||
|
* Auth: helper singleton to say whether a given event is allowed to do a given |
||||||
|
thing (TODO: put this on the diagram) |
||||||
|
* State: helper singleton: does state conflict resolution. You give it an event |
||||||
|
and it tells you if it actually updates the state or not, and annotates the |
||||||
|
event up properly and handles merge conflict resolution. |
||||||
|
* Storage: abstracts the storage engine. |
Loading…
Reference in new issue