跳至正文
Wener Notes

Connect

约 2 分钟阅读
标签:协议
  • connect.build
    • gRPC 竞品
    • 兼容 gRPC, gRPC-Web 协议
    • 支持 bi-streaming - 使用 gRPC 协议
    • 支持 JSON- 和 binary-encoded Protobuf
    • Connect 自身协议 - 基于 POST - application/connect+proto
      • 支持 Stream - 一行一个请求,类似 SSE
      • 协议和实现更简单
      • 支持 HTTP1
    • 目前支持 Go, Web, Node.js, Swift, Kotlin
  • grpc: application/grpc, application/grpc+proto, application/grpc+json
  • grpc-web: pplication/grpc-web, application/grpc-web+proto, application/grpc-web+json
  • connect
    • unary: application/proto, application/json
    • striming: application/connect+proto, application/connect+json
bash
brew install bufbuild/buf/buf

Awesome

协议

http
POST /<Package>.<Service>/<Method>

connect-es

  • router = {handlers,service(),rpc()}
    • handlers - universal handler
      • 支持所有协议 - grpc, grpcWeb, connect
      • 包含元信息
    • service 注册整个 service
    • rpc 注册一个方法
    • handler = 协议协商 -> interceptor -> impl
      • interceptor 无法访问当前的 impl
      • invokeUnaryImplementation
      • const next = applyInterceptors(fn,interceptors)
      • return message = next()

connect-web

bash
npm install @bufbuild/protoc-gen-es @bufbuild/protoc-gen-connect-web

PATH=$PATH:$(pwd)/node_modules/.bin

connect-go

bash
# 基于 POST 的 connect 协议
curl \
  --header "Content-Type: application/json" \
  --data '{"sentence": "I feel happy."}' \
  https://demo.connect.build/buf.connect.demo.eliza.v1.ElizaService/Say

# 兼容 gRPC 协议
grpcurl \
  -d '{"sentence": "I feel happy."}' \
  demo.connect.build:443 \
  buf.connect.demo.eliza.v1.ElizaService/Say
bash
go install github.com/bufbuild/buf/cmd/buf@latest
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/bufbuild/connect-go/cmd/protoc-gen-connect-go@latest
go install github.com/bufbuild/protobuf-es/cmd/protoc-gen-es@latest
buf.gen.yaml:
version: v1
plugins:
  - name: go
    out: gen
    opt: paths=source_relative
  - name: connect-go
    out: gen
    opt: paths=source_relative

实现

  • Handler - 当个 RPC 方法处理
    • 实现 Connect, gRPC, gRPC-Web 协议
    • 提供 ServeHTTP
    • 构造
      • NewBidiStreamHandler
      • NewClientStreamHandler
      • NewServerStreamHandler
      • NewUnaryHandler

Why Connect

  • gRPC 因为考虑 Google 内部使用和开源社区使用,一些设计上很乱很奇怪
  • gRPC 小版本也可能不出现兼容
  • gRPC 在 Web 环境非常麻烦
  • 要求 HTTP/2 Trailer - 对使用环境、实现要求苛刻
  • vs golang grpc
    • 不兼容 net/http
    • 实现复杂

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • API Awesome
    笔记 · connect

    灵活 · 静态结构 · 动态结构 · 兼容性 · 性能 · 延时要求 · 服务对服务 · 服务对客户端 · 序列化 · 二进制 · 文本 - JSON · 语言兼容 · 需要支持什么语言 · 自用只需考虑个别语言 · 对外则需要考虑通用 · 接口模式

  • protobuf-es
    笔记 · Connect

    bufbuild/protobuf-es · Apache-2.0, TS · protoc-gen-es · target - 默认为 js+dts · js - 生成 · ts - 生成 · dts - 生成 · importextension - import 的后缀

参考资料

GitHub9 条
其他外链3 条
最近更新commit d55dd1b编辑