ee741cc924dec10cdb2751525c1a3b9373f424aa
Clocker
Sequence diagram
@startuml
participant FE as "Frontend" << JavaScript >>
participant WS as "WS Server" << Python >>
participant Funnel as "Funnel" << Python >>
participant Segments as "ServeSegments" << Go >>
participant CurrentTime as "ServeCurrentTime" << NodeJS >>
activate FE #hotpink
FE -> FE: Load page
FE -> WS: WS Connect
loop #ivory
activate Funnel #gold
Funnel -> Segments: GetHours()
activate Segments #skyblue
Segments -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return HH
Funnel -> Segments: GetMinutes()
activate Segments #skyblue
Segments -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return MM
Funnel -> Segments: GetSeconds()
activate Segments #skyblue
Segments -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return SS
Funnel -> Segments: GetMilliseconds()
activate Segments #skyblue
Segments -> CurrentTime: GetCurrentTime()
activate CurrentTime #sandybrown
return HH:MM:SS.ms
return ms
Funnel -> WS: WS: Send complete time
WS --> FE: WS: Send complete time
deactivate Funnel
end
deactivate FE
@enduml
Services
| Service | Language | Port |
|---|---|---|
| Funnel | Python | - |
| ServeCurrentTime | NodeJS | 50000 |
| ServeSegments | Go | 50001 |
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
Install libraries:
go install
Run service:
make run
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.
Rust and gRPC: A complete guide
NodeJS service
Requirements:
- Node 16+
- npm package manager
Install npm packages:
cd src/serve_currenttime
npm install
Run service:
cd src/serve_currenttime
make run
Description
Languages
Python
40.9%
JavaScript
40%
Go
8%
Rust
4.8%
Makefile
3.7%
Other
2.6%