我是grpc的第一个学者。我认为这是一个丑陋的问题。
使用 grpc-go 创建了一个简单的聊天应用程序。而想要实现的就是这样的。
@clientA、clientB、clientC中的每一个,都连接到serverA,并且有一个双向的流连接。比如要通知clientA、B、C,clientD已经连接到serverA,有什么实现方法?
我已经阅读了这些帖子,但我想知道最佳实践。
例如,当创建一个客户列表并在那里通知时,这应该是怎样的代码?
我是grpc的第一个学者。我认为这是一个丑陋的问题。
使用 grpc-go 创建了一个简单的聊天应用程序。而想要实现的就是这样的。
@clientA、clientB、clientC中的每一个,都连接到serverA,并且有一个双向的流连接。比如要通知clientA、B、C,clientD已经连接到serverA,有什么实现方法?
我已经阅读了这些帖子,但我想知道最佳实践。
例如,当创建一个客户列表并在那里通知时,这应该是怎样的代码?
我把它写下来是因为它是自我解决的。
https://github.com/rodaine/grpc-chat
这个项目很有帮助。
type server struct {
ClientStreams map [string] chan chat.StreamResponse
}
这样就可以使用一个存储客户端流的map,这里是map,但是可以使用slice或者sync.Map。
通过在打开流时将来自客户端的信息连接到结构,我们能够支持广播和管理连接数。