Node.js GRPCAPI只在localhost中工作,在某处发布时不工作
我正试图通过rest和gRPC做一个基准测试 我编写了restapi,它接收许多json对象并对其进行计数。因此,我在linux上发布了一个带有azure容器()的Node.js GRPCAPI只在localhost中工作,在某处发布时不工作,node.js,azure,grpc,Node.js,Azure,Grpc,我正试图通过rest和gRPC做一个基准测试 我编写了restapi,它接收许多json对象并对其进行计数。因此,我在linux上发布了一个带有azure容器()的web应用程序,所有都运行良好。() 我编写了一个GRPCAPI(),在这个项目中,我在/bin文件夹中有一个server.js和一个client.js,在/protos文件夹中有一个.proto文件 这个GRPCAPI与RESTAPI做的事情相同,它接收许多json对象并对其进行计数 当我在端口8080300010上运行本地主机上的
web应用程序,所有都运行良好。()
我编写了一个GRPCAPI(),在这个项目中,我在/bin
文件夹中有一个server.js
和一个client.js
,在/protos
文件夹中有一个.proto
文件
这个GRPCAPI与RESTAPI做的事情相同,它接收许多json对象并对其进行计数
当我在端口8080300010上运行本地主机上的GRPCAPI时工作正常,我运行客户端,将json对象发送到gRPC方法,并返回行号
当我创建dockerfile()时,构建它,在端口X上运行grpc映像,并在我的本地计算机中运行容器,它也可以正常工作
当我试图在linux上的Web app上发布此容器时(与发布的方式相同),我的客户端没有返回任何内容。它没有进入我的请求方法,我尝试用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.");
我的客户机只是返回“finish”,因为它已经执行了gRPC请求
我认为这是端口之类的东西,所以我在Azure上创建了一个虚拟机,我打开了80到http请求,打开了8080到任何想要进入我虚拟机的东西。在这个虚拟机中,我安装了nodejs和我的gRPC项目,并在端口80上不使用docker运行它,因此我尝试在我的VM ip:port上执行我的gRPC客户端,它不太工作,所以我在这个虚拟机中发布了我的restapi,并且它工作了
因此,我尝试在没有docker的情况下将其发布到本地网络中,我在一台机器上运行我的gRPC API(与localhost:port一起工作),并尝试在另一台机器上运行我的客户端(我确信我使用的端口是打开的),同样的事情发生了,它不会进入我的请求方法,但当我使用resp API时,它会工作
我也试着用这个,但同样的事情发生了
我不知道这台gRPC服务器发生了什么情况,当我试图通过网络访问它时,为什么它不工作?您是否尝试过将npm rebuild
添加到您的Dockerfile中?我很确定您正在复制节点模块,因为我没有看到.dockrignore
。有了它们,npm安装
可能什么也做不了,我认为gRPC依赖于预编译的二进制文件。除此之外,您是否有任何服务器日志或错误?我在虚拟机上发布了gRPC,当我访问本地主机(进入虚拟机)时,它可以工作,但当我从另一台机器(无论是否在同一网络中)访问时,它不工作。每次有人访问我的gRPC服务器时,我都会记录它,并且只有在我在LocalHost中运行服务器和客户端时才会记录它。当您说“打开了80个http请求”时,您的意思是您明确指定Azure应接受http通信量吗?因为gRPC不使用HTTP,所以它使用了HTTP2,这是一种不同的协议。您是否尝试过将npm rebuild
添加到Dockerfile中?我很确定您正在复制节点模块,因为我没有看到.dockrignore
。有了它们,npm安装
可能什么也做不了,我认为gRPC依赖于预编译的二进制文件。除此之外,您是否有任何服务器日志或错误?我在虚拟机上发布了gRPC,当我访问本地主机(进入虚拟机)时,它可以工作,但当我从另一台机器(无论是否在同一网络中)访问时,它不工作。每次有人访问我的gRPC服务器时,我都会记录它,并且只有在我在LocalHost中运行服务器和客户端时才会记录它。当您说“打开了80个http请求”时,您的意思是您明确指定Azure应接受http通信量吗?因为gRPC不使用HTTP,所以它使用HTTP2,这是一种不同的协议。