如何响应多个 gRPC 客户端?
How do I respond to multiple gRPC clients?
我正在构建一个可以有多个 gRPC 服务器并且肯定会有多个 gRPC 客户端的应用程序,我想知道,如何在服务器端识别这是我正在与之交谈的客户端并且只向该客户端发送数据客户。我正在使用双向流式 RPC,现在数据被广播到每个客户端,我不希望这样。 go gRPC 中的哪些功能使其成为可能,或者我该如何实现它?
这听起来像是一个常见的 authentication/authorization 问题,最终与 gRPC 或 Go 没有太大关系。
您需要一种方式让客户表明他们是谁。我个人是 JWTs 的粉丝。在一个标准的 HTTP 请求中,有授权 headers 可以表明是谁在发出请求。同样,gRPC 支持附加到每个远程调用的元数据。在我目前的工作项目中,每个调用都必须在元数据中有一个 JWT,否则我不会处理请求。除了登录端点之外的每个调用。
我没有研究如何获取 gRPC 客户端的 IP 地址或有关客户端连接的其他信息等详细信息,但 gRPC 生成的代码提供的任何内容很可能都是客户端伪造的。如果架构正确,JWT 可以提供加密信心,证明客户就是他们声称的那个人。
这道题有两种读法。一种方法是将其视为之前回答的身份验证问题。第二种方式是我如何阅读它,作为一个 connection/session 问题。
当客户端连接时,grpc 服务器将调用一个函数来在其自己的 goroutine 中实现调用,并且该函数将只与发起该调用的客户端通信。因此,您注册为 grpc 服务器的结构将在许多连接之间共享,但每个连接都将 运行 在其自己的 goroutine 中,并且只会与启动它的客户端通信。这也意味着您必须确保 grpc 服务器实现是线程安全的。
您提到数据正在广播给每个客户端? grpc 中没有广播,你确定是这样吗?
我正在构建一个可以有多个 gRPC 服务器并且肯定会有多个 gRPC 客户端的应用程序,我想知道,如何在服务器端识别这是我正在与之交谈的客户端并且只向该客户端发送数据客户。我正在使用双向流式 RPC,现在数据被广播到每个客户端,我不希望这样。 go gRPC 中的哪些功能使其成为可能,或者我该如何实现它?
这听起来像是一个常见的 authentication/authorization 问题,最终与 gRPC 或 Go 没有太大关系。
您需要一种方式让客户表明他们是谁。我个人是 JWTs 的粉丝。在一个标准的 HTTP 请求中,有授权 headers 可以表明是谁在发出请求。同样,gRPC 支持附加到每个远程调用的元数据。在我目前的工作项目中,每个调用都必须在元数据中有一个 JWT,否则我不会处理请求。除了登录端点之外的每个调用。
我没有研究如何获取 gRPC 客户端的 IP 地址或有关客户端连接的其他信息等详细信息,但 gRPC 生成的代码提供的任何内容很可能都是客户端伪造的。如果架构正确,JWT 可以提供加密信心,证明客户就是他们声称的那个人。
这道题有两种读法。一种方法是将其视为之前回答的身份验证问题。第二种方式是我如何阅读它,作为一个 connection/session 问题。
当客户端连接时,grpc 服务器将调用一个函数来在其自己的 goroutine 中实现调用,并且该函数将只与发起该调用的客户端通信。因此,您注册为 grpc 服务器的结构将在许多连接之间共享,但每个连接都将 运行 在其自己的 goroutine 中,并且只会与启动它的客户端通信。这也意味着您必须确保 grpc 服务器实现是线程安全的。
您提到数据正在广播给每个客户端? grpc 中没有广播,你确定是这样吗?