zoukankan      html  css  js  c++  java
  • gRPC

    Nodejs 版本

    Github地址:https://github.com/changbaihe/GrpcDemo

    一、编写pb文件(.proto),例:chat.proto

      注:1.protocol buffers 维基百科:https://zh.wikipedia.org/wiki/Protocol_Buffers

        2.protocol buffers 语法详见:https://developers.google.com/protocol-buffers

    syntax = "proto3";  // 使用proto3语法,因为从3.0.0 Beta2版,开始支持JavaScript
    
    package grpcTest;   // 定义包名
    // 定义服务名
    service chat {
      // 定义远程调用方法
      rpc getMessage(HelloRequest) returns (HelloResponse) {}
      rpc getAge(HelloRequest) returns (HelloResponse) {}
    }
    
    // 定义消息类型
    message HelloRequest{
      int32 id = 1;
      string name = 2;
      int32 age = 3;
      string year = 4;
    }
    
    // 定义消息类型
    message HelloResponse{
      string reply = 1;
    }

    二、demo代码:index.js

    const path = require('path');
    const grpc = require('grpc');
    
    const PROTO_PATH = path.join(__dirname,'./chat.proto');
    const protoLoader = require('@grpc/proto-loader');
    const packageDefinition = protoLoader.loadSync(
      PROTO_PATH,
      {
        keepCase: true,
        longs: String,
        enums: String,
        defaults: true,
        oneofs: true
      }
    );
    const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
    const packageObj = protoDescriptor.grpcTest;
    
    // 服务端
    const server = new grpc.Server();
    server.addService(
      packageObj.chat.service,
      {
        getMessage: (call, callback) => callback(null, {reply: `hello, ${call.request.name}`}),
        getAge: (call, callback) => callback(null, {reply: `${call.request.name} age is ${call.request.age} year old.`}),
      }
    );
    server.bind('0.0.0.0:8080', grpc.ServerCredentials.createInsecure());
    server.start();
    console.log('servering……');
    
    
    // 客户端
    const client = new packageObj.chat(
      'localhost:8080',
      grpc.credentials.createInsecure()
    );
    
    setTimeout(() => {
      const req = { id: 1, name: 'cbh', age: 23, year: '1996' }
      client.getMessage(req, (err, data) => {
        if (err) {
          return console.error(err);
        }
        console.log(data.reply);
      });
    
      client.getAge(req, (err, data) => {
        if (err) {
          return console.error(err);
        }
        console.log(data.reply);
      });
    }, 1000);
    

      

  • 相关阅读:
    PIE-SDK For C++栅格数据的金字塔创建
    PIE-SDK For C++栅格数据集的读写
    PIE-SDK For C++栅格数据集的读取
    PIE-SDK For C++内存栅格数据的创建
    【系列文章】数据结构与算法——图
    大小端模式
    几种常见的排序方法(C语言实现)
    WPF——数据绑定(二)绑定方法—绑定本地对象
    WPF——数据绑定(一)什么是数据绑定
    WPF多窗口传参解决方案
  • 原文地址:https://www.cnblogs.com/changbaihe/p/11695678.html
Copyright © 2011-2022 走看看