我试图通过休息与gRPC制作基准。
我编写了我的rest api,它接收了许多json对象并对其进行了计数。所以我将其作为web app on linux
与天蓝色容器(I published it using this way, but my image is public)发布,所有都可以正常工作。 (docker image)
我编写了一个gRPC API(code here),在这个项目中,我在server.js
文件夹中有一个client.js
和一个/bin
,还有一个.proto
档案/protos
这个gRPC API与REST api做的事情相同,它接收许多json对象并对其进行计数。
当我在localhost
上的端口80,8080,3000,3010上运行gRPC API ... 它工作正常,我运行我的客户端,将json对象发送到gRPC方法并返回行号。
当我创建一个dockerfile(docker image)时,构建它,在端口X上运行grpc-image并在我的本地计算机中运行容器,它也可以正常工作
当我尝试在Web app on linux
发布此容器时(与publish a rest api相同),我的客户端什么都不返回。它没有进入我的请求方法,我试图用console.log(" test")登录,无论请求是否有效。
client.testMethod({ lines: JSON.parse(data) }, function(err, response) {
if(err){
console.log('ERRO: ', err);
}else{
console.log('Greeting:', response);
}
console.log('response: ', response); //log regardless of whether the request works or not.
});
console.log("finish.");
我的客户刚刚返回"完成"因为它已经执行了gRPC请求。
我认为它类似于端口或其他东西,所以我在Azure上创建了一个虚拟机,我打开了80个http请求,8080打开了任何想进入的东西我的VM。在我的VM中我安装了nodejs和我的gRPC项目,并在端口80上没有docker的情况下运行它,所以我试图在我的VM ip:port上执行我的gRPC客户端,而它也没有工作,所以我在这个虚拟机中发布了我的 rest api ,并且有效。
所以我尝试将它发布到没有docker的本地网络中,我在一台机器上运行我的gRPC API(与localhost:port一起使用)并尝试在其他机器上运行我的客户端(我确定我使用的端口)是开放的),同样的事情发生了,它没有进入我的请求方法,但是当我使用resp api时,它可以工作。
我也尝试使用ngrok,但同样的事情发生了。
我不知道这台gRPC服务器发生了什么,为什么当我尝试通过网络访问它时它不起作用?