由于连接被强制终止,使用 ngrok 测试 gRPC 失败
Posted
技术标签:
【中文标题】由于连接被强制终止,使用 ngrok 测试 gRPC 失败【英文标题】:Testing gRPC with ngrok fails due to connection forcefully terminated 【发布时间】:2020-04-20 13:41:49 【问题描述】:我在通过 ngrok 公开 gRPC 服务器时遇到了一些问题。
我已经关注并从here 下载了演示代码。
通过 localhost 连接很好,但是通过 ngrok 连接会导致以下错误:
捕获错误:gRPC 错误(2,HTTP/2 错误:连接错误:连接被强制终止。(错误代码:10))
这是我在~/.ngrok2/ngrok.yml
文件中用于 ngrok 的隧道配置:
tunnels:
grpc:
proto: http
addr: 8080
bind_tls: true
region: eu
inspect: true
这就是我到目前为止所做的:
dart bin/server.dart
ngrok grpc
编辑 lib/src/client.dart
以使用来自 ngrok 的 forwarding
网址
dart bin/client.dart
虽然服务器正在侦听 8080,但客户端正在尝试连接到标准端口 443 上的 ngrok 的 url 以获取 https。
我正在考虑使用 HTTP2(gRPC 依赖于它),但根据 this ngrok 应该支持它(我正在运行版本 2.3.35
)。
我错过了什么或做错了什么?
【问题讨论】:
【参考方案1】:原来ngrok
在http
选项下表现不佳。
切换到proto:tcp
解决了我的问题。
我想这是因为 ngrok 在选择 proto: http
! 时期望 gRPC 未提供的东西!
【讨论】:
您是否有机会将完整的 ngrok.yml 文件与您用于 gRPC 的隧道规范共享?在您提供的示例中,我尝试将 proto:http 更改为 proto:tcp,但无法使其正常工作 - 如果您有完整的工作配置,我很乐意看到它。谢谢! 嗨,我不知道我当前的 .yaml 是否一致,因为它已经过时了,在这个问题之后我可能已经将 ngrok 用于其他事情。我当前的 .yaml 与我的问题中的基本相同,但没有bind_tls
行(只需删除它)。不过,阅读我的回答提示我,除了删除 bind_tls
之外,您还应该将 proto:http
更改为 proto:tcp
!以上是关于由于连接被强制终止,使用 ngrok 测试 gRPC 失败的主要内容,如果未能解决你的问题,请参考以下文章