@ bufbuilding/ 连接- 节点
连接是一个图书馆大家庭,用于在不同语言和平台上建立和消费API,以及 @ bufbuilding/ 连接 将带有Protobuf的 安全 API 带到 类型脚本 .
@bufbuild/connect-node 为Node.js提供下列适配器:
创建连接传输 ()
让您的客户端运行在节点.js上,与连接协议的服务器交谈:
import { createPromiseClient } from "@bufbuild/connect";
+ import { createConnectTransport } from "@bufbuild/connect-node";
import { ElizaService } from "./gen/eliza_connect.js";
+ // A transport for clients using the Connect protocol with Node.js `http` module
+ const transport = createConnectTransport({
+ baseUrl: "https://demo.connectrpc.com",
+ httpVersion: "1.1"
+ });
const client = createPromiseClient(ElizaService, transport);
const { sentence } = await client.say({ sentence: "I feel happy." });
console.log(sentence) // you said: I feel happy.
创建Grpc Transport ()
让您的客户端在 Node.js 上运行, 用 gRPC 协议与服务器交谈 :
import { createPromiseClient } from "@bufbuild/connect";
+ import { createGrpcTransport } from "@bufbuild/connect-node";
import { ElizaService } from "./gen/eliza_connect.js";
+ // A transport for clients using the gRPC protocol with Node.js `http2` module
+ const transport = createGrpcTransport({
+ baseUrl: "https://demo.connectrpc.com",
+ httpVersion: "2"
+ });
const client = createPromiseClient(ElizaService, transport);
const { sentence } = await client.say({ sentence: "I feel happy." });
console.log(sentence) // you said: I feel happy.
创建GrpcWeb Transport ()
让您的客户端在 Node.js 上运行, 用 gRPC-web 协议与服务器交谈 :
import { createPromiseClient } from "@bufbuild/connect";
+ import { createGrpcWebTransport } from "@bufbuild/connect-node";
import { ElizaService } from "./gen/eliza_connect.js";
+ // A transport for clients using the Connect protocol with Node.js `http` module
+ const transport = createGrpcWebTransport({
+ baseUrl: "https://demo.connectrpc.com",
+ httpVersion: "1.1"
+ });
const client = createPromiseClient(ElizaService, transport);
const { sentence } = await client.say({ sentence: "I feel happy." });
console.log(sentence) // you said: I feel happy.
连接节点Adapter ()
在节点上运行您的连接 RPC http, (中文(简体) ), https,或 http2 模块.
// connect.ts
import { ConnectRouter } from "@bufbuild/connect";
export default function(router: ConnectRouter) {
// implement rpc Say(SayRequest) returns (SayResponse)
router.rpc(ElizaService, ElizaService.methods.say, async (req) => ({
sentence: `you said: ${req.sentence}`,
}));
}
// server.ts
import * as http2 from "http2";
+ import routes from "connect";
+ import { connectNodeAdapter } from "@bufbuild/connect-node";
http2.createServer(
+ connectNodeAdapter({ routes }) // responds with 404 for other requests
).listen(8080);
通过该服务器运行,您可以使用任意 gRPC, gRPC-Web, 或连接客户端来提出请求 .
buf curl gRPC 协议:
buf curl --schema buf.build/connectrpc/eliza \
--protocol grpc --http2-prior-knowledge \
-d '{"sentence": "I feel happy."}' \
http://localhost:8080/connectrpc.eliza.v1.ElizaService/Say
curl 与连接协议 :
curl \
--header "Content-Type: application/json" \
--data '{"sentence": "I feel happy."}' \
--http2-prior-knowledge \
http://localhost:8080/connectrpc.eliza.v1.ElizaService/Say
GRPC 协议的节点:
import { createPromiseClient } from "@bufbuild/connect";
import { createGrpcTransport } from "@bufbuild/connect-node";
import { ElizaService } from "./gen/eliza_connect.js";
const transport = createGrpcTransport({
baseUrl: "http://localhost:8080",
httpVersion: "2",
});
const client = createPromiseClient(ElizaService, transport);
const { sentence } = await client.say({ sentence: "I feel happy." });
console.log(sentence) // you said: I feel happy.
网页浏览器的客户端实际上与这个示例完全相同 - 它会
简单的使用 createConnectTransport 从 @ bufbuilding/ 连接- web
换句话说.