aierda 2023-03-28 11:22 采纳率: 78.6%
浏览 38
已结题

使用grpc遇到的问题

问题描述:
我参考了关于grpc双向流的技术文章,网址为

之后,建立了一个控制台项目作为grpc请求发起请求的客户端,并且建立
了一个web项目作为接收请求的服务端,测试成功,两边可以相互通讯。
然后
我另外新建一个web项目,希望将其代替前面建立的控制台项目,作为
grpc请求发起请求的客户端,也就是说grpc的客户端和服务端都是web项目
,但是却出现了问题:
客户端发起请求时报“Status(StatusCode="Internal", Detail="Request protocol 'HTTP/1.1' is not supported.")”
这样的错误。
我们知道grpc是通过http/2进行通讯的,难道两个web端之间不能使用http/2进行通讯?
我百度了一下,似乎有个叫gRPC-Web的东西可以解决这个问题,是不是客户端和服务端
都需要gRPC-Web进行封装呢,还是只是服务端?

上面提到参考文章有源码可下,地址为https://github.com/stulzq/BlogDemos

img

提问:各位能人是否有遇到我这种情况, 请求解决方案和经验指点,期待大伙的意见,感谢!

  • 写回答

5条回答 默认 最新

  • 叶秋学长 全栈领域优质创作者 2023-03-28 20:37
    关注

    基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦💕(最新版更智能,功能更加强大):
    您的问题可能是由于两个Web项目之间使用了HTTP/1.1协议导致的,而gRPC需要使用HTTP/2协议才能正常工作。可以尝试在两个Web项目中使用HTTP/2协议来解决这个问题。

    可以使用gRPC-Web将gRPC请求转换为HTTP/1.1或HTTP/2请求,并在Web浏览器中使用JavaScript编写gRPC客户端代码。在这种情况下,您需要修改客户端代码以使用gRPC-Web。您可以使用如下命令来生成gRPC-Web代码:

    protoc --plugin=protoc-gen-grpc-web=/usr/local/bin/grpc-web-proxy \
           --grpc-web_out=import_style=commonjs,mode=grpcwebtext:./ \
           path/to/your.proto
    
    

    此外,您还需要在Web项目中安装并配置gRPC-Web代理,以便将gRPC请求转换为HTTP/1.1或HTTP/2请求。对于Java Web项目,您可以使用grpc-web-java库提供的gRPC-Web代理。

    如果您不想使用gRPC-Web,也可以尝试使用WebSocket协议来实现双向通信。WebSocket协议可以在Web浏览器和服务器之间建立持久性的双向连接,并支持二进制数据传输。在这种情况下,您需要使用WebSocket库来实现gRPC客户端和服务器。例如,您可以使用grpc-websocket-proxy来实现gRPC客户端和服务器之间的通信。

    综上所述,您可以尝试使用gRPC-Web或WebSocket来实现两个Web项目之间的双向通信。如果您有其他问题或需要更多帮助,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 创建了问题 3月28日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因