Grpc Nodejs server 配置示例

发布于 2023-12-06 11:38:52 字数 2302 浏览 29 评论 0

syntax = "proto3";

package App;

message Empty {};

message Response {
  int32 code = 1;
  string message = 2;
}

service EchoService {
    rpc Greet(Empty) returns (Response);
}

Node server :

const PROTO_PATH = __dirname + '/proto/echo.proto';

const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');
const packageDefinition = protoLoader.loadSync(
    PROTO_PATH,
    {
        keepCase: true,
        longs: String,
        enums: String,
        defaults: true,
        oneofs: true
    });
const echo_proto = grpc.loadPackageDefinition(packageDefinition);

/**
 * @param call  proto 定义的函数参数
 * @param callback 第二个为 proto 定义的函数返回的参数
 * @constructor
 */
function Greet(call, callback) {
    callback(null, {code: 0, message: "Hello node gRPC."});
}

function main() {
    const server = new grpc.Server();
    console.log(echo_proto);
    server.addService(echo_proto.App.EchoService.service, {Greet});
    server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
    server.start();
}

main();

Node 端代码会自动编译 protobuf 文件,所以不需要手动生成。

依赖:

    "@grpc/proto-loader": "^0.1.0",
    "async": "^1.5.2",
    "google-protobuf": "^3.0.0",
    "grpc": "^1.11.0",
    "lodash": "^4.6.1",
    "minimist": "^1.2.0"

PHP Client

PHP Grpc 暂时不支持 Server 端,只支持生成 Client 代码,而且需要通过 grpc_php_plugin 插件手动将 protobuf 文件转换成 PHP 代码。

编译:

protoc --proto_path=proto --php_out=src --grpc_out=src --plugin=protoc-gen-grpc=../grpc/bins/opt/grpc_php_plugin proto/echo.proto

生成之后将其加入 composer autoload ,示例:

    "autoload": {
        "psr-4": {
            "App\\": "src/App",
            "GPBMetadata\\": "src/GPBMetadata"
        }
    },

根据实际目录定义 autoload 加载方式,确保能够正确引入 PHP 文件,依赖:

    "require": {
        "grpc/grpc": "^1.27",
        "google/protobuf": "^3.11"
    }

客户端代码:

<?php
require "vendor/autoload.php";

$client = new \App\EchoServiceClient("0.0.0.0:50051", [
    'credentials' => Grpc\ChannelCredentials::createInsecure(),
]);

list($res, $status) = $client->Greet(new \App\PBEmpty())->wait();
var_dump($res->getMessage());
echo "-------------";
var_dump($status);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

玩心态

暂无简介

文章
评论
27 人气
更多

推荐作者

佚名

文章 0 评论 0

今天

文章 0 评论 0

゛时过境迁

文章 0 评论 0

达拉崩吧

文章 0 评论 0

呆萌少年

文章 0 评论 0

孤者何惧

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文