go - 如何安全地将布尔字段添加到 gRPC 服务器结构?
问题描述
我正在寻找将本质上是“状态”布尔字段的内容添加到我的 gRPC 服务器。这个想法是当满足某些条件时可以设置服务器的状态,因此当任何新的 gRPC 请求进来时,响应将相应地进行调整。
我有一个server struct
我正在使用的,对于这个例子,我添加了一个HappyHour bool
字段。我有一个在服务器启动时运行的 goroutine,它每分钟检查一天中的时间。如果一天中的时间在下午 5 点到 7 点之间,则 HappyHour 设置为 true。否则,它被设置为假。
type server struct {
HappyHour bool
mu sync.RWMutex
}
func (s *server) OrderDrink(ctx context.Context, req *bar.DrinkRequest) (*flatbuffers.Builder, error) {
drink := string(req.drink())
qty := req.qty()
// Code here to look up the price of the drink in the database
total := price*qty
// Use a mutex to check HappyHour status
s.mu.RLock()
defer mu.RLock()
if s.HappyHour == true {
total=total/2
}
b := flatbuffers.NewBuilder(0)
// Serialize the response and send it to the client
}
func main() {
lis, err := net.Listen("tcp", "0.0.0.0:50051")
if err != nil {
log.Fatal(err)
}
s := grpc.NewServer(grpc.CustomCodec(flatbuffers.FlatbuffersCodec{}))
var srv server
bar.RegisterBARServer(s, &srv)
// Monitor happy hour
go happyHour(&srv)
}
从我最初的测试开始,一切似乎都在工作,但我对 gRPC 还是很陌生,并且有点担心在服务器结构上使用互斥锁。
如果有很多客户端连接到服务器,是否会对性能产生负面影响?如果我正在阅读或更新 HappyHour,并且已获得锁,这会影响新用户连接或发送请求吗?或者这只会影响实际HappyHour
领域?
解决方案
推荐阅读
- three.js - 天空盒 + OrbitControls 问题
- php - PHP PDO MYSQL-使用 implode() 更新列中具有多个值的单元格,使用旧值获取新值
- react-native - 为多个列表反应原生 svg 条形图;我怎样才能分开2条
- java - 从 Excel 读取和写入数据:POI 和 JXL | 发现异常 org.openqa.selenium.InvalidArgumentException
- swift - iOS 共享扩展:hasItemConformingToTypeIdentifier 给出了错误的类型
- php - PHP:到达终点时,在本地找不到,但在远程找到
- sql-server - Microsoft SQL Server 中的临时表过早删除
- python-3.x - tensorflow 2.0 中是否支持功能层 api 支持?
- c# - ExecuteReader 为其中一列返回空值,但数据库中存在数据
- bash - Combine the two files having common string in file name into a new file