2017-05-29 22 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); 
    }); 
} 

私は "カールはlocalhost: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ファイルにcomputernameを追加するだけで、私はこの問題を解決しました。

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/

ありがとう!

関連する問題