gRPC-Web 项目教程

gRPC-Web 项目教程

grpc-webgRPC for Web Clients项目地址:https://gitcode.com/gh_mirrors/gr/grpc-web

项目介绍

gRPC-Web 是一个前沿的规范,它允许现代浏览器调用 gRPC 服务。gRPC 是一个基于 HTTP/2 的现代化协议,提供使用强类型二进制数据格式的 RPC 语义,支持多种编程语言(如 C++, C#, Golang, Java, Python, NodeJS, Objective-C 等)。gRPC-Web 使得前端开发者能够直接与后端 gRPC 服务进行交互,无需传统的 REST API 层。

项目快速启动

环境准备

确保你已经安装了以下工具:

  • Node.js
  • npm 或 yarn
  • Docker(用于运行 Envoy 代理)

安装 gRPC-Web 客户端库

npm install grpc-web

定义服务

使用 Protocol Buffers 定义你的 gRPC 服务和消息类型。创建一个 echo.proto 文件:

syntax = "proto3";

package echo;

service EchoService {
  rpc Echo (EchoRequest) returns (EchoResponse);
}

message EchoRequest {
  string message = 1;
}

message EchoResponse {
  string message = 1;
}

生成客户端代码

使用 protocprotoc-gen-grpc-web 插件生成客户端代码:

protoc -I=. --grpc-web_out=import_style=commonjs,mode=grpcwebtext:. echo.proto

配置 Envoy 代理

创建一个 envoy.yaml 文件来配置 Envoy 代理:

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9901 }

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          codec_type: AUTO
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains:
              - "*"
              routes:
              - match: { prefix: "/" }
                route:
                  cluster: echo_service
                  max_stream_duration:
                    grpc_timeout_header_max: 0s
          http_filters:
          - name: envoy.filters.http.grpc_web
          - name: envoy.filters.http.router
  clusters:
  - name: echo_service
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    lb_policy: ROUND_ROBIN
    http2_protocol_options: {}
    load_assignment:
      cluster_name: echo_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: localhost
                port_value: 9090

运行 Envoy 代理

使用 Docker 运行 Envoy 代理:

docker run -d -v $(pwd)/envoy.yaml:/etc/envoy/envoy.yaml -p 8080:8080 envoyproxy/envoy:v1.14.1

编写客户端代码

创建一个 index.js 文件来编写客户端代码:

const {EchoServiceClient} = require('./echo_grpc_web_pb');
const {EchoRequest} = require('./echo_pb');

const client = new EchoServiceClient('http://localhost:8080');

const request = new EchoRequest();
request.setMessage('Hello, gRPC-Web!');

client.echo(request, {}, (err, response) => {
  if (err) {
    console.error(err);
  } else {
    console.log(response.getMessage());
  }
});

grpc-webgRPC for Web Clients项目地址:https://gitcode.com/gh_mirrors/gr/grpc-web

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祁泉望Ernestine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值