{"id":19093644,"url":"https://github.com/distkv-project/drpc","last_synced_at":"2025-04-30T12:45:34.491Z","repository":{"id":45106144,"uuid":"214398736","full_name":"distkv-project/drpc","owner":"distkv-project","description":"A high performance RPC framework for distkv.","archived":false,"fork":false,"pushed_at":"2023-05-09T18:40:45.000Z","size":313,"stargazers_count":17,"open_issues_count":6,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-19T02:23:37.171Z","etag":null,"topics":["async-server","high-performance","multi-languages","next-generation-rpc","rpc"],"latest_commit_sha":null,"homepage":"","language":"Java","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/distkv-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-11T09:38:23.000Z","updated_at":"2024-08-24T13:32:37.000Z","dependencies_parsed_at":"2024-11-09T03:27:19.553Z","dependency_job_id":"6936c5b0-adc0-4f6d-8932-38c76acde6bb","html_url":"https://github.com/distkv-project/drpc","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distkv-project%2Fdrpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distkv-project%2Fdrpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distkv-project%2Fdrpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/distkv-project%2Fdrpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/distkv-project","download_url":"https://codeload.github.com/distkv-project/drpc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251703206,"owners_count":21630199,"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","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":["async-server","high-performance","multi-languages","next-generation-rpc","rpc"],"created_at":"2024-11-09T03:25:34.433Z","updated_at":"2025-04-30T12:45:34.460Z","avatar_url":"https://github.com/distkv-project.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Drpc\n[![codecov](https://codecov.io/gh/distkv-project/drpc/branch/master/graph/badge.svg)](https://codecov.io/gh/dist/drpc)\n\n`Drpc` is a high performance RPC framework, which aims to help users build their networking communications easily.\nThe biggest feature to distinguish with other RPC frameworks is it supports multiple languages server.\n\n## Awesome Features\n- Multiple languages server and client\n- Asynchronous services in server\n- Dynamic registration for service\n- The ability for order preserving\n- High performance and easy to use\n\n## Quick Started\n### 1. Build Project\n```bash\nmvn clean install -DskipTests\n```\n### 2. Run Server Example\n```bash\nServer example: ./example/src/main/java/com/distkv/drpc/pb/ExampleServer.java\n```\n### 3. Run Client Example\n```bash\nClient example: ./example/src/main/java/com/distkv/drpc/pb/ExampleServer.java\n```\n## Examples\n### 1. Server Example\n```java\nimport org.drpc.DrpcServer;\nimport org.drpc.config.ServerConfig;\n\npublic class ExampleServer {\n\n  public static void main(String[] args) {\n    ServerConfig serverConfig = ServerConfig.builder()\n        .port(8080)\n        .build();\n\n    DrpcServer drpcServer = new DrpcServer(serverConfig);\n    drpcServer.registerService(ExampleService.class, new ExampleServiceImpl());\n    drpcServer.run();\n  }\n}\n```\n### 2. Client Example\n```java\nimport org.drpc.Stub;\nimport org.drpc.api.Client;\nimport org.drpc.config.ClientConfig;\nimport org.drpc.netty.DrpcClient;\nimport org.drpc.pb.generated.StringProtocol;\nimport org.drpc.session.DrpcSession;\n\nimport java.util.concurrent.CompletableFuture;\n\npublic class ExampleClient {\n\n  public static void main(String[] args) throws Throwable {\n    ClientConfig clientConfig = ClientConfig.builder()\n        .address(\"127.0.0.1:8080\")\n        .build();\n\n    Client client = new DrpcClient(clientConfig);\n    client.open();\n\n    Stub\u003cExampleService\u003e stub = new Stub\u003c\u003e(ExampleService.class);\n    ExampleService service = stub.getService(client);\n\n    StringProtocol.PutRequest putRequest = StringProtocol.PutRequest.newBuilder()\n        .setKey(\"dstPut\")\n        .setValue(\"PutValue\")\n        .build();\n\n    StringProtocol.GetRequest getRequest = StringProtocol.GetRequest.newBuilder()\n        .setKey(\"dstGet\").build();\n\n    //sync\n    StringProtocol.GetResponse getResponse = service.get(getRequest).get();\n    System.out.println(getResponse.getStatus());\n    System.out.println(getResponse.getValue());\n    StringProtocol.PutResponse putResponse = service.put(putRequest).get();\n    System.out.println(putResponse.getStatus());\n\n    //async\n    CompletableFuture future1 = service.get(getRequest);\n    future1.whenComplete((r, t) -\u003e {\n      if (t == null) {\n        System.out.println(getResponse.getStatus());\n        System.out.println(getResponse.getValue());\n      }\n    });\n\n    CompletableFuture future2 = service.put(putRequest);\n    future2.whenComplete((r, t) -\u003e {\n      if (t == null) {\n        System.out.println(putResponse.getStatus());\n      }\n    });\n\n\n    //session (keep order)\n    DrpcSession session = DrpcSession.createSession();\n    ExampleService sessionService = stub.getService(client, session);\n\n    //async (keep order in server)\n    CompletableFuture sessionFuture1 = sessionService.get(getRequest);\n    sessionFuture1.whenComplete((r, t) -\u003e {\n      if (t == null) {\n        System.out.println(getResponse.getValue());\n      }\n    });\n    CompletableFuture sessionFuture2 = sessionService.put(putRequest);\n    sessionFuture2.whenComplete((r, t) -\u003e {\n      if (t == null) {\n        System.out.println(putResponse.getStatus());\n      }\n    });\n\n    sessionFuture1.get();\n    sessionFuture2.get();\n\n    client.close();\n  }\n}\n```\n## Roadmap\n\n#### Done\n- ~~Asynchronous services in server~~\n- ~~Order preserving in one client context~~\n- ~~Session concept for Order preserving~~\n\n#### Doing\n- Go client and C++ client\n- Dynamic registration for service\n\n#### Planned and TBD\n- Support Multiple languages for server\n- Load balance for services\n\n## Performance\nTODO\n\n## Getting Involved\nThank you for your attention to the `Drpc` project. If you have any questions, you can create a new issue in our Issues list. And we welcome you to participate in our project. If you want to make some contributions, you can refer the file [CONTRIBUTING.md](https://github.com/dst-project/drpc/blob/master/CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdistkv-project%2Fdrpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdistkv-project%2Fdrpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdistkv-project%2Fdrpc/lists"}