2.8 KiB
2.8 KiB
Clocker
Sequence diagram
@startuml
participant FE as "Frontend" << React >>
participant Funnel as "Funnel" << Python >>
participant Hours as "ServeHours" << Go >>
participant Minutes as "ServeMinutes" << Go >>
participant Seconds as "ServeSeconds" << Go >>
participant Milliseconds as "ServeMilliseconds" << Go >>
participant CurrentTime as "ServeCurrentTime" << Rust >>
activate FE #hotpink
FE -> FE: Load page
FE -> Funnel: WS Connect
loop #ivory
activate Funnel #gold
Funnel -> Hours: GetHours()
activate Hours #skyblue
Hours -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return HH
Funnel -> Minutes: GetMinutes()
activate Minutes #skyblue
Minutes -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return MM
Funnel -> Seconds: GetSeconds()
activate Seconds #skyblue
Seconds -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return SS
Funnel -> Milliseconds: GetMilliseconds()
activate Milliseconds #skyblue
Milliseconds -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return ms
Funnel -> FE: WS: Send formatted time
deactivate Funnel
end
deactivate FE
@enduml
Services
| Service | Language | Port |
|---|---|---|
| Funnel | Python | - |
| ServeCurrentTime | Rust | 50000 |
| ServeHours | Go | 50001 |
| ServeMinutes | Go | 50002 |
| ServeSeconds | Go | 50003 |
| ServeMilliseconds | Go | 50004 |
Funnel
Requirements:
- python 3.8+
- grpcio
- grpcio-tools
Install virtualenv and libs
cd src/funnel
virtualenv env
source env/bin/activate
pip install -r requirements.txt
Compile proto stubs:
cd src/funnel
make proto
Run service:
cd src/funnel
make run
Go services
Install protobuf compiler
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
Rust services
Update rustc
rustup update
Tonic
Tonic is a gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility. This library was created to have first class support of async/await and to act as a core building block for production systems written in Rust.