我的代码遇到问题,它给了我一个错误:
未命名和混合参数
func(uc fyne.URIWriteCloser, error) {
...
}
Run Code Online (Sandbox Code Playgroud) TLDR:我正在寻找一种方法来更新每次调用的开放流上的标头,而stream.Send(msg)
无需关闭流并打开一个新流。
概括
我有一个 GRPC 客户端和服务器来处理双向流。要向服务器进行身份验证,客户端必须在请求标头中发送 JWT,并将其设置为“授权”。令牌的有效期为 30 分钟。令牌过期后,服务器将终止连接。
我正在寻找一种方法来刷新客户端的授权令牌,并保持流打开。客户端应在循环中运行,每 30 分钟使用更新的令牌和更新的负载执行一个新请求。我还没有找到从客户端更新已打开流的标头的方法。
让我们看一些代码来了解客户端的样子。下面的代码有一个函数用于创建客户端的新实例,另一个函数用于建立与 GRPC 服务器的连接。
func NewWatchClient(config *Config, logger *logrus.Logger) (*WatchClient, error) {
cc, err := newConnection(config, logger)
if err != nil {
return nil, err
}
service := proto.NewWatchServiceClient(cc)
return &WatchClient{
config: config,
conn: cc,
logger: entry,
service: service,
}, nil
}
func newConnection(config *Config, logger *logrus.Logger) (*grpc.ClientConn, error) {
address := fmt.Sprintf("%s:%d", config.Host, config.Port)
// rpcCredential implements credentials.PerRPCCredentials
rpcCredential := newTokenAuth(config.Auth, config.TenantID)
return grpc.Dial(
address,
grpc.WithPerRPCCredentials(rpcCredential), …
Run Code Online (Sandbox Code Playgroud)