RPC与HTTP的详细比较

RPC 示例(使用 gRPC)

在这个例子中,我们使用 gRPC(一个流行的 RPC 框架)来演示 RPC 的基本用法。我们创建一个简单的计算器服务,客户端可以调用服务器上的加法操作。

服务定义 - Calculator.proto
syntax = "proto3";

service Calculator {
  rpc Add (AddRequest) returns (AddResponse);
}

message AddRequest {
  int32 operand1 = 1;
  int32 operand2 = 2;
}

message AddResponse {
  int32 result = 1;
}
服务器端 - CalculatorServer.java
import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.stub.StreamObserver;

public class CalculatorServer {
    public static void main(String[] args) throws Exception {
        Server server = ServerBuilder.forPort(8080)
                .addService(new CalculatorServiceImpl())
                .build();

        server.start();
        System.out.println("Server started on port 8080");
        server.awaitTermination();
    }

    static class CalculatorServiceImpl extends CalculatorGrpc.CalculatorImplBase {
        @Override
        public void add(AddRequest request, StreamObserver responseObserver) {
            int result = request.getOperand1() + request.getOperand2();
            AddResponse response = AddResponse.newBuilder().setResult(result).build();
            responseObserver.onNext(response);
            responseObserver.onCompleted();
        }
    }
}
客户端 - CalculatorClient.java
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

public class CalculatorClient {
    public static void main(String[] args) {
        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8080)
                .usePlaintext()
                .build();

        CalculatorGrpc.CalculatorBlockingStub stub = CalculatorGrpc.newBlockingStub(channel);

        AddRequest request = AddRequest.newBuilder()
                .setOperand1(5)
                .setOperand2(3)
                .build();

        AddResponse response = stub.add(request);

        System.out.println("Result: " + response.getResult());

        channel.shutdown();
    }
}

在这个例子中,我们使用 Protocol Buffers 定义了一个简单的 RPC 服务,该服务包含一个加法操作。服务器和客户端使用 gRPC 框架进行通信。

HTTP 示例

在这个例子中,我们使用 Java 中的 Spring Boot 框架演示了一个简单的 HTTP 服务器和客户端。我们创建一个简单的 Web 服务,客户端通过 HTTP 请求获取服务器上的文本内容。

服务器端 - HttpServer.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class HttpServer {
    public static void main(String[] args) {
        SpringApplication.run(HttpServer.class, args);
    }

    @RestController
    public static class MyController {
        @GetMapping("/example")
        public String getExample() {
            return "

Hello, World!

"; } } }
客户端 - HttpClient.java
import org.springframework.web.client.RestTemplate;

public class HttpClient {
    public static void main(String[] args) {
        String url = "http://localhost:8080/example";
        RestTemplate restTemplate = new RestTemplate();

        String response = restTemplate.getForObject(url, String.class);

        System.out.println("Response: " + response);
    }
}

在这个例子中,我们使用 Spring Boot 创建了一个简单的 HTTP 服务器,并使用 RestTemplate 发送 HTTP GET 请求。客户端通过 HTTP 获取服务器上的 HTML 内容

你可能感兴趣的:(rpc,http,qt)