2017-05-29 2 views
0

Keine Fehler, keine Antwort an meinen Kunden. Mein message.proto:Keine Antwort von NodeJs gRPC Server

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

Mein gRPC Server:

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

Mein Kunde:

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

Wenn ich eine "curl localhost: 7777" do-Befehl, zeigt der Server eine SSL Handshake-Fehler, also weiß ich, dass es zuhört. Der Client zeigt an:

secure connection established with gRPC server 
in list 
in snd 

Und das ist alles. Keine Fehler auf beiden Seiten. Ich habe es ohne SSL versucht und bekomme genau das gleiche Ergebnis.

Meine Versionen: Knoten --Version v6.9.5

Protoc --Version libprotoc 2.6.1

npm --Version 3.10.10

Jede Hilfe sehr geschätzt.

TIA

+2

Ich bemerke, dass Sie sagen, dass 'curl localhost: 7777' den SSL-Handshake wie erwartet durchführt, aber Sie bauen Ihren Client so auf, dass er sich mit' hyperledger-devenv: 7777' verbindet. Bist du sicher, dass "localhost" aufgelöst wird? Außerdem sollte ich darauf hinweisen, dass nach Abschluss des Client-Konstruktors keine Verbindung hergestellt wurde. Die Verbindung wird zum ersten Mal versucht, wenn eine Anfrage gestellt wird. – murgatroid99

Antwort

0

murgatroid99 Sie hatten Recht. Durch einfaches Hinzufügen des Computernamens zu meiner Datei/etc/hosts habe ich das Problem gelöst.

127.0.0.1 hyperledger-devenv

Der Name "hyperledger-devenv" ist der Wert, den ich in Vagrant Konfiguration "Vagrantfile" für die virtuellen Bildnamen platziert. Dies wurde in meiner SSH-Eingabeaufforderung angezeigt. Der echte Computername kann mit dem Befehl hostname angezeigt werden. viel https://bertrandszoghy.wordpress.com/2017/05/30/send-and-receive-protocol-buffers-securely-with-grpc-in-nodejs/

Danke:

Für Interessenten, ich habe alle meine Schritte in einem Blog-Eintrag dokumentiert!

Verwandte Themen