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);
    

      

  • 相关阅读:
    7、Nginx基础Http原理
    8、nginx基础
    9、nginx常用基础模块
    第一章·MySQL介绍及安装
    第二章· MySQL体系结构管理
    第三章·MySQL版本区别及管理
    第四章· MySQL客户端工具及SQL讲解
    第五章· MySQL数据类型
    第六章· MySQL索引管理及执行计划
    第七章· MySQL的存储引擎
  • 原文地址:https://www.cnblogs.com/changbaihe/p/11695678.html
Copyright © 2011-2022 走看看