Новое в gRP C, я пытаюсь транслировать видеофайл с помощью grp c, и клиент, и сервер находятся в узле, при запуске службы я могу консоль регистрировать буфер на стороне сервера, однако Я ничего не могу получить со стороны клиента. Может ли кто-нибудь мне помочь, спасибо!
video.proto:
syntax = "proto3";
package videoservice;
service VideoService {
rpc callVideo (EmptyRequest) returns (stream VideoResponse);
}
message EmptyRequest {}
message VideoResponse {
bytes videoStream = 1;
}
Реализация на сервере. js:
var PROTO_PATH = __dirname + '/video.proto';
var fs = require('fs');
var grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
var videoservice = grpc.loadPackageDefinition(packageDefinition).videoservice;
function callVideo(call) {
let videoDataStream = fs.createReadStream('./sample.mp4');
videoDataStream.on('data',function(chunk){
console.log(chunk);
call.write(chunk);
}).on('end',function(){
call.end();
})
}
function getServer() {
var server = new grpc.Server();
server.addService(videoservice.VideoService.service, {
callVideo: callVideo
});
return server;
}
if (require.main === module) {
// If this is run as a script, start a server on an unused port
var videoServer = getServer();
videoServer.bind('0.0.0.0:9090', grpc.ServerCredentials.createInsecure());
videoServer.start();
}
exports.getServer = getServer;
и клиент. js:
var PROTO_PATH = __dirname + '/video.proto';
var grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
var vs = grpc.loadPackageDefinition(packageDefinition).videoservice;
const REMOTE_URL = "localhost:9090";
let client = new vs.VideoService(REMOTE_URL, grpc.credentials.createInsecure());
client.callVideo({}).on('data',function(chunk){
console.log(chunk.videoStream);
});
Ниже вывод, левая часть - буферы 'содержимое на стороне сервера перед переходом в канал gRP C, а правая часть - это результат на стороне клиента, у которого ничего нет в каждом фрагменте: