設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。
設定ファイル
redis_update.proto
こちらと同じ
Python の gRPC で Redis のデータを更新 (Update)
サーバープログラム
redis_update_server.js
#! /usr/bin/node
// ---------------------------------------------------------------// redis_update_server.js//// Feb/09/2020// ---------------------------------------------------------------varPROTO_PATH='redis_update.proto'vargrpc=require('grpc')varprotoLoader=require('@grpc/proto-loader')varpackageDefinition=protoLoader.loadSync(PROTO_PATH,{keepCase:true,longs:String,enums:String,defaults:true,oneofs:true});varredis_update_proto=grpc.loadPackageDefinition(packageDefinition).redis_update// ---------------------------------------------------------------functionget_current_date_proc(){consttoday=newDate()varddx=(1900+today.getYear())+"-"+(today.getMonth()+1)ddx+="-"+today.getDate()returnddx}// ---------------------------------------------------------------functionredis_update_proc(key_in,population_in){constredis=require("redis")constclient=redis.createClient(6379,'localhost')client.on("error",function(err){console.log("Redis connection error to "+client.host+":"+client.port+" - "+err)})client.get(key_in,function(err,reply){if(err){console.log("Get error: "+err)}elseif(reply!=null){varjson_str=replyvarunit_aa=JSON.parse(json_str)unit_aa.population=population_inunit_aa.date_mod=get_current_date_proc()varjson_out=JSON.stringify(unit_aa)console.log(json_out)client.set(key_in,json_out,redis.print)client.quit()}})}// ---------------------------------------------------------------functionRedisUpdate(call,callback){console.error("*** RedisUpdate ***")constkey_in=call.request.keyconstpopulation_in=call.request.populationconststr_out='RedisUpdate '+call.request.keyconsole.error(str_out)redis_update_proc(key_in,population_in)callback(null,{key:call.request.key});}// ---------------------------------------------------------------functionmain(){varserver=newgrpc.Server()server.addService(redis_update_proto.Greeter.service,{RedisUpdate:RedisUpdate})server.bind('0.0.0.0:50051',grpc.ServerCredentials.createInsecure())server.start()}// ---------------------------------------------------------------main()// ---------------------------------------------------------------
クライアントプログラム
redis_update_client.js
#! /usr/bin/node
// ---------------------------------------------------------------// redis_update_client.js//// Feb/09/2020// ---------------------------------------------------------------varPROTO_PATH='redis_update.proto'vargrpc=require('grpc')varprotoLoader=require('@grpc/proto-loader')varpackageDefinition=protoLoader.loadSync(PROTO_PATH,{keepCase:true,longs:String,enums:String,defaults:true,oneofs:true})varredis_update_proto=grpc.loadPackageDefinition(packageDefinition).redis_update// ---------------------------------------------------------------functionmain(){varclient=newredis_update_proto.Greeter('localhost:50051',grpc.credentials.createInsecure())varkey_in=process.argv[2]varpopulation_in=process.argv[3]client.RedisUpdate({key:key_in,population:population_in},function(err,response){console.log('key:',response.key)})}// ---------------------------------------------------------------main()// ---------------------------------------------------------------
サーバープログラムの起動
export NODE_PATH=/usr/lib/node_modules
./redis_update_server.js
クライアントプログラムの実行
$ export NODE_PATH=/usr/lib/node_modules
$ ./redis_update_client.js t1857 8234500
key: t1857