Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/distkv-project/drpc
A high performance RPC framework for distkv.
https://github.com/distkv-project/drpc
async-server high-performance multi-languages next-generation-rpc rpc
Last synced: 2 months ago
JSON representation
A high performance RPC framework for distkv.
- Host: GitHub
- URL: https://github.com/distkv-project/drpc
- Owner: distkv-project
- Created: 2019-10-11T09:38:23.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-05-09T18:40:45.000Z (over 1 year ago)
- Last Synced: 2024-07-18T15:30:29.036Z (6 months ago)
- Topics: async-server, high-performance, multi-languages, next-generation-rpc, rpc
- Language: Java
- Homepage:
- Size: 306 KB
- Stars: 16
- Watchers: 7
- Forks: 11
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
# Drpc
[![codecov](https://codecov.io/gh/distkv-project/drpc/branch/master/graph/badge.svg)](https://codecov.io/gh/dist/drpc)`Drpc` is a high performance RPC framework, which aims to help users build their networking communications easily.
The biggest feature to distinguish with other RPC frameworks is it supports multiple languages server.## Awesome Features
- Multiple languages server and client
- Asynchronous services in server
- Dynamic registration for service
- The ability for order preserving
- High performance and easy to use## Quick Started
### 1. Build Project
```bash
mvn clean install -DskipTests
```
### 2. Run Server Example
```bash
Server example: ./example/src/main/java/com/distkv/drpc/pb/ExampleServer.java
```
### 3. Run Client Example
```bash
Client example: ./example/src/main/java/com/distkv/drpc/pb/ExampleServer.java
```
## Examples
### 1. Server Example
```java
import org.drpc.DrpcServer;
import org.drpc.config.ServerConfig;public class ExampleServer {
public static void main(String[] args) {
ServerConfig serverConfig = ServerConfig.builder()
.port(8080)
.build();DrpcServer drpcServer = new DrpcServer(serverConfig);
drpcServer.registerService(ExampleService.class, new ExampleServiceImpl());
drpcServer.run();
}
}
```
### 2. Client Example
```java
import org.drpc.Stub;
import org.drpc.api.Client;
import org.drpc.config.ClientConfig;
import org.drpc.netty.DrpcClient;
import org.drpc.pb.generated.StringProtocol;
import org.drpc.session.DrpcSession;import java.util.concurrent.CompletableFuture;
public class ExampleClient {
public static void main(String[] args) throws Throwable {
ClientConfig clientConfig = ClientConfig.builder()
.address("127.0.0.1:8080")
.build();Client client = new DrpcClient(clientConfig);
client.open();Stub stub = new Stub<>(ExampleService.class);
ExampleService service = stub.getService(client);StringProtocol.PutRequest putRequest = StringProtocol.PutRequest.newBuilder()
.setKey("dstPut")
.setValue("PutValue")
.build();StringProtocol.GetRequest getRequest = StringProtocol.GetRequest.newBuilder()
.setKey("dstGet").build();//sync
StringProtocol.GetResponse getResponse = service.get(getRequest).get();
System.out.println(getResponse.getStatus());
System.out.println(getResponse.getValue());
StringProtocol.PutResponse putResponse = service.put(putRequest).get();
System.out.println(putResponse.getStatus());//async
CompletableFuture future1 = service.get(getRequest);
future1.whenComplete((r, t) -> {
if (t == null) {
System.out.println(getResponse.getStatus());
System.out.println(getResponse.getValue());
}
});CompletableFuture future2 = service.put(putRequest);
future2.whenComplete((r, t) -> {
if (t == null) {
System.out.println(putResponse.getStatus());
}
});//session (keep order)
DrpcSession session = DrpcSession.createSession();
ExampleService sessionService = stub.getService(client, session);//async (keep order in server)
CompletableFuture sessionFuture1 = sessionService.get(getRequest);
sessionFuture1.whenComplete((r, t) -> {
if (t == null) {
System.out.println(getResponse.getValue());
}
});
CompletableFuture sessionFuture2 = sessionService.put(putRequest);
sessionFuture2.whenComplete((r, t) -> {
if (t == null) {
System.out.println(putResponse.getStatus());
}
});sessionFuture1.get();
sessionFuture2.get();client.close();
}
}
```
## Roadmap#### Done
- ~~Asynchronous services in server~~
- ~~Order preserving in one client context~~
- ~~Session concept for Order preserving~~#### Doing
- Go client and C++ client
- Dynamic registration for service#### Planned and TBD
- Support Multiple languages for server
- Load balance for services## Performance
TODO## Getting Involved
Thank 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).