{"id":31968392,"url":"https://github.com/ihcsim/routeguide","last_synced_at":"2025-10-14T18:52:39.733Z","repository":{"id":149608401,"uuid":"168476416","full_name":"ihcsim/routeguide","owner":"ihcsim","description":"GRPC client-server exercise to explore unary and streaming requests","archived":false,"fork":false,"pushed_at":"2023-10-05T19:46:26.000Z","size":3083,"stargazers_count":11,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-06T02:19:18.520Z","etag":null,"topics":["go","grpc","grpc-go","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ihcsim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-01-31T06:42:45.000Z","updated_at":"2025-01-09T03:35:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"d1199cb4-d1af-4927-aa17-fa9c8967c69b","html_url":"https://github.com/ihcsim/routeguide","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ihcsim/routeguide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihcsim%2Frouteguide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihcsim%2Frouteguide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihcsim%2Frouteguide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihcsim%2Frouteguide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ihcsim","download_url":"https://codeload.github.com/ihcsim/routeguide/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihcsim%2Frouteguide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020337,"owners_count":26086867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","grpc","grpc-go","kubernetes"],"created_at":"2025-10-14T18:52:36.135Z","updated_at":"2025-10-14T18:52:39.728Z","avatar_url":"https://github.com/ihcsim.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# routeguide\nThis repository contains a gRPC programming exercise which is based on the [basic tutorial](https://grpc.io/docs/tutorials/basic/go.html) found in the official gRPC documentation.\n\nThe objective of this exercise is to explore the following gRPC features:\n\n* Unary RPC\n* Client streaming RPC\n* Server streaming RPC\n* Full duplex RPC\n* Interceptors (to return faulty responses)\n* Health checks\n* Load balancing\n* gRPC Metadata\n\nIt is developed using the following software:\n\n* Minikube v0.33.1\n* Go 1.10.2\n* Protoc 3.6.1\n* dep v0.5.0\n* Linkerd2 edge-19.1.3\n\n## About The Applications\nThe gRPC server exposes the 4 interfaces:\n\nAPI            | Description\n-------------- | -----------\n`GetFeature`   | Obtains the feature at a given position.\n`ListFeatures` | Obtains the features available within the given rectangle, via server-side streaming.\n`RecordRoute`  | Accepts a stream of points from the client and returns a summary of the route traversed.\n`RouteChat`    | Accepts a stream of route notes from the client and returns another stream of notes to the client.\n\nIt also uses interceptors to return faulty responses.\n\nThe gRPC client is used to make RPC calls to the server APIs. It can be started in two modes:\n\nMode       | Description\n---------- | -----------\n`FIREHOSE` | The client issues random calls to all 4 APIs in an infinite loop.\n`REPEATN`  | The client issues N calls to the selected API. The client will exit once it repeated N calls.\n\n\nTo run the server and client locally:\n```\n$ make server\n$ make client\n```\nEnsure that your local hostname resolves to 127.0.0.1. If not, add it to your `/etc/hosts` file.\n\nTo try out the client-side round robin load balancing, start multiple instances of the servers:\n```\n$ SERVER_PORT=8080 make server \u0026\n$ SERVER_PORT=8081 make server \u0026\n$ SERVER_PORT=8082 make server \u0026\n$ make client\n```\nNotice the logs of the servers as requests are received from the client.\n\nTo build the Dockerfile on Minikube:\n```\n$ make image\n```\n\nTo meshed the server and client on Minikube with the Linkerd 2 proxy:\n```\n$ make mesh\n```\n\nTo build the protobuf files:\n```\n$ make proto\n```\n\nTo delete all resources from Minikube:\n```\n$ make clean\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fihcsim%2Frouteguide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fihcsim%2Frouteguide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fihcsim%2Frouteguide/lists"}