2017-05-29 159 views
0

没有错误,没有回应我的客户。我message.proto:NodeJs没有响应gRPC服务器

syntax = "proto3"; 

message TstCoordinates { 
    required int32 id = 1; 
    required string firstname = 2; 
    required string lastname = 3; 
    required string email = 4; 
    required string areacode = 5; 
    required string phone = 6; 
    required string extension = 7; 
} 

message TstId { 
    required int32 id = 1; 
} 

message Empty {} 

service TstService{ 
    rpc SendCoordinates (TstId) returns (TstCoordinates); 
    rpc List (Empty) returns (TstCoordinates); 
} 

我GRPC服务器:

'use strict'; 

const fs = require('fs'); 
const grpc = require('grpc'); 
const serviceDef = grpc.load("message.proto"); 
const PORT = 7777; 

const cacert = fs.readFileSync('certs/ca.crt'), 
     cert = fs.readFileSync('certs/server.crt'), 
     key = fs.readFileSync('certs/server.key'), 
     kvpair = { 
      'private_key': key, 
      'cert_chain': cert 
     }; 
const creds = grpc.ServerCredentials.createSsl(cacert, [kvpair]); 

var tstcoordinates = [ 
    { 
     id: 1, 
     firstname: "Bill", 
     lastname: "Williams", 
     email: "[email protected]", 
     areacode: "444", 
     phone: "555-1212", 
     extension: "378" 
    }, 
    { 
     id: 2, 
     firstname: "Happy", 
     lastname: "Golucky", 
     email: "[email protected]", 
     areacode: "444", 
     phone: "555-1212", 
     extension: "382" 
    } 
]; 

var server = new grpc.Server(); 

server.addService(serviceDef.TstService.service, { 
    list: function(call, callback) { 
     console.log("in list"); 
     callback(null, tstcoordinates[0]); 
    }, 
    sendCoordinates: function(call, callback) { 
     console.log("in sendCoordinates"); 
     callback(null, tstcoordinates[1]); 
     return; 
    } 
}); 

server.bind(`0.0.0.0:${PORT}`, creds); 
console.log(`Starting gRPC server on port ${PORT}`); 
server.start(); 

我的客户:

'use strict'; 

const fs = require('fs'); 
const process = require('process'); 
const grpc = require('grpc'); 
const serviceDef = grpc.load("message.proto"); 

const PORT = 7777; 

const cacert = fs.readFileSync('certs/ca.crt'), 
     cert = fs.readFileSync('certs/client.crt'), 
     key = fs.readFileSync('certs/client.key'), 
     kvpair = { 
      'private_key': key, 
      'cert_chain': cert 
     }; 

const creds = grpc.credentials.createSsl(cacert, key, cert); 

const client = new serviceDef.TstService(`hyperledger-devenv:${PORT}`,creds); 
console.log("secure connection established with gRPC server"); 

lst(); 
snd(); 

function printResponse(error, response) { 
    console.log("in printResponse"); 
    if (error) 
     console.log('Error: ', error); 
    else 
     console.log(response); 
} 

function lst() { 
    console.log("in list"); 
    client.list({}, function(error, response) { 
     console.log("in list call"); 
     printResponse(error, response); 
    }); 
} 

function snd() { 
    console.log("in snd"); 
    client.sendCoordinates({'id': 1}, function(error, response) { 
     console.log("in snd call"); 
     printResponse(error, response); 
    }); 
} 

当我做了一个 “本地主机卷曲:7777” 命令,服务器显示的SSL握手错误,所以我知道它在听。客户端显示:

secure connection established with gRPC server 
in list 
in snd 

而就是这样。任何一方都没有错误。我尝试没有SSL,并得到完全相同的结果。

我的版本: 节点--version v6.9.5

protoc --version libprotoc 2.6.1

NPM --version 3.10.10

任何帮助极大的赞赏。

TIA

+2

我注意到你说'curl localhost:7777'按预期执行SSL握手,但是你构建你的客户端来连接到'hyperledger-devenv:7777'。你确定解析为'localhost'吗?另外,我应该指出,当客户端构造函数完成时,并不意味着连接已经建立。第一次发出请求时会尝试连接。 – murgatroid99

回答

0

murgatroid99你是对的。通过简单地将计算机名添加到我的/ etc/hosts文件中,我解决了这个问题。

127.0.0.1 hyperledger-devenv的

名字 “hyperledger-devenv的” 我是放置在流浪的配置 “Vagrantfile” 为虚像名的值。这是显示在我的SSH提示。真实的计算机名称可以使用hostname命令显示。

对于那些有兴趣,我已经证明我在博客中的所有步骤的: https://bertrandszoghy.wordpress.com/2017/05/30/send-and-receive-protocol-buffers-securely-with-grpc-in-nodejs/

谢谢了!