micro_traffic_sim gRPC server
This crate exposes the gRPC API for the micro traffic simulation via cellular automata. It can be used as a Rust library (crates.io), run as a server binary, and distributed via Docker. Go and Python client stubs can be generated from the same protos.
Table of Contents
- Prerequisites for building from source
- Build and run (binary)
- Docker
- Pre-built binaries from GitHub releases page
- Usage
- Client code generation
Prerequisites for building from source
- Rust 1.91.0 which is tested with 2024 edition in my case
protocavailable on PATH- Optional:
dockerfor container builds
Build and run (binary)
- Debug build (library mode):
make build
- Run the gRPC server:
make run-server
- Release binary:
make build-release- Binary path:
target/release/micro_traffic_sim
Notes:
- The server is behind a Cargo feature flag
server. Commands above enable it when needed. Those are basically:
- Default listen address is
0.0.0.0:50051.
Docker
There are two supported paths: build locally with Dockerfile, or pull from registry.
Build and run locally
- Build
make docker-build IMAGE=micro-traffic-sim/server TAG=latest
- Run
make docker-run IMAGE=micro-traffic-sim/server TAG=latest- This maps host port 50051 -> container port 50051.
The Docker image is built with a multi-stage process (Rust builder + slim runtime). It compiles with the server feature enabled.
Pre-built image from registry
The server image is available from both Docker Hub and GitHub Container Registry.
Docker Hub:
GitHub Container Registry:
Replace latest with a specific version tag (e.g., 0.1.0) for reproducible deployments.
Pre-built binaries from GitHub releases page
Download pre-built binaries from the GitHub Releases page.
Available builds:
- Linux (amd64):
micro-traffic-sim-server-{version}-linux-amd64.tar.gz - Windows (amd64):
micro-traffic-sim-server-{version}-windows-amd64.zip
Linux example:
# Download and extract
# Run the server
Windows example:
# Extract the zip file, then run:
.\micro_traffic_sim.exe
The server listens on 0.0.0.0:50051 by default.
Usage
Run server locally
E.g. we can run the server in debug mode with:
Rust client to micro_traffic_sim gRPC server
Add the crate to your project: cargo add micro_traffic_sim
Golang client to micro_traffic_sim gRPC server
Here more details: clients/go/README.md
# from repository root
Python client to micro_traffic_sim gRPC server
Here more details: clients/python/README.md
# from repository root
Client code generation
This section describes how I've used to generate client code for different languages from the proto files.
Golang
Client code generation for Golang is done via scripts/gen_go.sh. It requires protoc and protoc-gen-go to be installed and available on PATH.
Python
Client code generation for Python is done via scripts/gen_python.sh. The script automatically creates a virtual environment and installs all dependencies.
The script:
- Creates
.venvinclients/python/(if not exists) - Installs dependencies from
requirements.txt - Generates
*_pb2.py,*_pb2.pyi(type stubs), and*_pb2_grpc.py - Installs the
micro-traffic-simpackage in editable mode