我是gRPC的新手,现在正在学习这项技术,我想知道gRpc是否可以取代SignalR来更新我的客户端应用程序(React)上的通知栏。是这样吗?或者我应该继续使用SignalR来处理这个问题?(我问它只是为了确保我理解gRpc技术的目的,通过我读到的一些文章,它更多的是一个Web API替代品,很少有人将其与SignalR进行比较)谢谢!y-me
x33g5p2x1#
假设你是指基于浏览器的客户端,那么否你不能使用gRPC。gRPC协议依赖于HTTP/2帧,特别是发送和接收HTTP trailer的能力。虽然浏览器本身可以并且确实使用HTTP/2,但当前的浏览器API(XHR/Fetch)不公开HTTP/2语义。然而,还有一种替代协议gRPC-web,它支持gRPC功能的一个子集,您可以从基于浏览器的应用程序中使用。鉴于它是一种不同的协议,您的服务器将需要支持它,或者您将需要使用像Envoy这样的代理,可以将gRPC-Web调用转换为gRPC。
XHR
Fetch
htzpubme2#
我不能回答你的问题是否可以用于服务器/客户端通信,只是提供一些想法。SignalR是为了客户端和服务器之间的真实的实时通信而设计的,因为它的适应性,而gRPC受其约束(HTTP/2和HTTPS)更多地保留用于后端微服务通信。
sd2nnvve3#
微软更喜欢在Blazor应用程序中使用SignalR。他们没有使用gRPC。我想这回答了你的问题。如果你的WebApp是在React中构建的,并且如果一个请求在内部进行多个API调用,那么你可以在多个gRPC服务之上使用一个webAPI。然后你的API将充当所有gRPC的 Package 器,WebApp(React)将不受gRPC调用的影响。
3条答案
按热度按时间x33g5p2x1#
假设你是指基于浏览器的客户端,那么否你不能使用gRPC。gRPC协议依赖于HTTP/2帧,特别是发送和接收HTTP trailer的能力。虽然浏览器本身可以并且确实使用HTTP/2,但当前的浏览器API(
XHR
/Fetch
)不公开HTTP/2语义。然而,还有一种替代协议gRPC-web,它支持gRPC功能的一个子集,您可以从基于浏览器的应用程序中使用。鉴于它是一种不同的协议,您的服务器将需要支持它,或者您将需要使用像Envoy这样的代理,可以将gRPC-Web调用转换为gRPC。
htzpubme2#
我不能回答你的问题是否可以用于服务器/客户端通信,只是提供一些想法。SignalR是为了客户端和服务器之间的真实的实时通信而设计的,因为它的适应性,而gRPC受其约束(HTTP/2和HTTPS)更多地保留用于后端微服务通信。
sd2nnvve3#
微软更喜欢在Blazor应用程序中使用SignalR。他们没有使用gRPC。我想这回答了你的问题。
如果你的WebApp是在React中构建的,并且如果一个请求在内部进行多个API调用,那么你可以在多个gRPC服务之上使用一个webAPI。然后你的API将充当所有gRPC的 Package 器,WebApp(React)将不受gRPC调用的影响。