feat: add Chinese comments for Kafka and WebSocket server functionalities to improve code readability
This commit is contained in:
parent
e9f0f8fd40
commit
0b8757a824
@ -20,6 +20,7 @@ type Data struct {
|
|||||||
func NewData(c *conf.Data, logger log.Logger) (*Data, func(), error) {
|
func NewData(c *conf.Data, logger log.Logger) (*Data, func(), error) {
|
||||||
log := log.NewHelper(logger)
|
log := log.NewHelper(logger)
|
||||||
|
|
||||||
|
// 创建 Kafka 生产者
|
||||||
kafkaWriter := kafka.NewKafkaWriter(c.Kafka.Brokers, c.Kafka.Topic)
|
kafkaWriter := kafka.NewKafkaWriter(c.Kafka.Brokers, c.Kafka.Topic)
|
||||||
|
|
||||||
cleanup := func() {
|
cleanup := func() {
|
||||||
|
|||||||
@ -28,7 +28,7 @@ type Message struct {
|
|||||||
Content json.RawMessage `json:"content"`
|
Content json.RawMessage `json:"content"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendMessage sends a message to Kafka.
|
// SendMessage 发送消息到 Kafka
|
||||||
func (r *WebSocketRepo) SendMessage(ctx context.Context, message []byte) error {
|
func (r *WebSocketRepo) SendMessage(ctx context.Context, message []byte) error {
|
||||||
err := r.data.kafka.SendToKafkaMessage(ctx, "websocket", message)
|
err := r.data.kafka.SendToKafkaMessage(ctx, "websocket", message)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -17,6 +17,7 @@ type KafkaConsumerServer struct {
|
|||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewKafkaConsumerServer 创建 Kafka 消费者服务器
|
||||||
func NewKafkaConsumerServer(c *conf.Data, wsService *service.WebSocketService) (*KafkaConsumerServer, func()) {
|
func NewKafkaConsumerServer(c *conf.Data, wsService *service.WebSocketService) (*KafkaConsumerServer, func()) {
|
||||||
consumer := kafka.NewKafkaReader(c.Kafka.Brokers, c.Kafka.Topic, int(c.Kafka.Partition), c.Kafka.GroupId)
|
consumer := kafka.NewKafkaReader(c.Kafka.Brokers, c.Kafka.Topic, int(c.Kafka.Partition), c.Kafka.GroupId)
|
||||||
messageHandler := service.NewMessageHandler(wsService, consumer.Reader)
|
messageHandler := service.NewMessageHandler(wsService, consumer.Reader)
|
||||||
@ -33,17 +34,20 @@ func NewKafkaConsumerServer(c *conf.Data, wsService *service.WebSocketService) (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start 启动 Kafka 消费者
|
||||||
func (s *KafkaConsumerServer) Start(ctx context.Context) error {
|
func (s *KafkaConsumerServer) Start(ctx context.Context) error {
|
||||||
s.wg.Add(1)
|
s.wg.Add(1)
|
||||||
go s.consumeMessages(ctx)
|
go s.consumeMessages(ctx)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stop 停止 Kafka 消费者
|
||||||
func (s *KafkaConsumerServer) Stop(ctx context.Context) error {
|
func (s *KafkaConsumerServer) Stop(ctx context.Context) error {
|
||||||
s.wg.Wait()
|
s.wg.Wait()
|
||||||
return s.consumer.Close()
|
return s.consumer.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// consumeMessages 消费 Kafka 消息
|
||||||
func (s *KafkaConsumerServer) consumeMessages(ctx context.Context) {
|
func (s *KafkaConsumerServer) consumeMessages(ctx context.Context) {
|
||||||
defer s.wg.Done()
|
defer s.wg.Done()
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,7 @@ type WebSocketServer struct {
|
|||||||
done chan struct{} // 添加 done 通道用于优雅关闭
|
done chan struct{} // 添加 done 通道用于优雅关闭
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewWebSocketServer 创建 WebSocket 服务器
|
||||||
func NewWebSocketServer(c *conf.Server, svc *service.WebSocketService) *WebSocketServer {
|
func NewWebSocketServer(c *conf.Server, svc *service.WebSocketService) *WebSocketServer {
|
||||||
return &WebSocketServer{
|
return &WebSocketServer{
|
||||||
conf: c,
|
conf: c,
|
||||||
@ -42,6 +43,7 @@ func NewWebSocketServer(c *conf.Server, svc *service.WebSocketService) *WebSocke
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start 启动 WebSocket 服务器
|
||||||
func (s *WebSocketServer) Start(ctx context.Context) error {
|
func (s *WebSocketServer) Start(ctx context.Context) error {
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
mux.HandleFunc(s.conf.Websocket.Path, s.handleWebSocket)
|
mux.HandleFunc(s.conf.Websocket.Path, s.handleWebSocket)
|
||||||
@ -64,6 +66,7 @@ func (s *WebSocketServer) Start(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stop 停止 WebSocket 服务器
|
||||||
func (s *WebSocketServer) Stop(ctx context.Context) error {
|
func (s *WebSocketServer) Stop(ctx context.Context) error {
|
||||||
// 关闭所有 WebSocket 连接
|
// 关闭所有 WebSocket 连接
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
@ -87,6 +90,7 @@ func (s *WebSocketServer) Stop(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handleWebSocket 处理 WebSocket 连接请求
|
||||||
func (s *WebSocketServer) handleWebSocket(w http.ResponseWriter, r *http.Request) {
|
func (s *WebSocketServer) handleWebSocket(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Printf("Received WebSocket connection request from %s", r.RemoteAddr)
|
log.Printf("Received WebSocket connection request from %s", r.RemoteAddr)
|
||||||
|
|
||||||
@ -101,6 +105,7 @@ func (s *WebSocketServer) handleWebSocket(w http.ResponseWriter, r *http.Request
|
|||||||
go s.readPump(conn)
|
go s.readPump(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// readPump 读取 WebSocket 消息
|
||||||
func (s *WebSocketServer) readPump(conn *websocket.Conn) {
|
func (s *WebSocketServer) readPump(conn *websocket.Conn) {
|
||||||
defer func() {
|
defer func() {
|
||||||
s.unregister <- conn
|
s.unregister <- conn
|
||||||
@ -138,17 +143,18 @@ func (s *WebSocketServer) readPump(conn *websocket.Conn) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// run 运行 WebSocket 服务器
|
||||||
func (s *WebSocketServer) run() {
|
func (s *WebSocketServer) run() {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-s.done:
|
case <-s.done: // 如果 done 通道被关闭,则退出循环
|
||||||
return
|
return
|
||||||
case client := <-s.register:
|
case client := <-s.register: // 如果 register 通道有新的连接,则将连接添加到 clients 中
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
s.clients[client] = true
|
s.clients[client] = true
|
||||||
s.mu.Unlock()
|
s.mu.Unlock()
|
||||||
log.Printf("New client connected. Total clients: %d", len(s.clients))
|
log.Printf("New client connected. Total clients: %d", len(s.clients))
|
||||||
case client := <-s.unregister:
|
case client := <-s.unregister: // 如果 unregister 通道有连接关闭,则将连接从 clients 中删除
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
if _, ok := s.clients[client]; ok {
|
if _, ok := s.clients[client]; ok {
|
||||||
delete(s.clients, client)
|
delete(s.clients, client)
|
||||||
@ -156,7 +162,7 @@ func (s *WebSocketServer) run() {
|
|||||||
}
|
}
|
||||||
s.mu.Unlock()
|
s.mu.Unlock()
|
||||||
log.Printf("Client disconnected. Total clients: %d", len(s.clients))
|
log.Printf("Client disconnected. Total clients: %d", len(s.clients))
|
||||||
case message := <-s.broadcast:
|
case message := <-s.broadcast: // 如果 broadcast 通道有消息,则广播消息给所有客户端
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
for client := range s.clients {
|
for client := range s.clients {
|
||||||
err := client.WriteMessage(websocket.TextMessage, message)
|
err := client.WriteMessage(websocket.TextMessage, message)
|
||||||
|
|||||||
@ -21,6 +21,7 @@ type WebSocketMessage struct {
|
|||||||
Payload json.RawMessage `json:"payload,omitempty"`
|
Payload json.RawMessage `json:"payload,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMessageHandler 创建 MessageHandler
|
||||||
func NewMessageHandler(wsService *WebSocketService, reader *kafkago.Reader) *MessageHandler {
|
func NewMessageHandler(wsService *WebSocketService, reader *kafkago.Reader) *MessageHandler {
|
||||||
return &MessageHandler{
|
return &MessageHandler{
|
||||||
wsService: wsService,
|
wsService: wsService,
|
||||||
@ -52,6 +53,7 @@ func (h *MessageHandler) parseWebSocketMessage(message []byte) (*WebSocketMessag
|
|||||||
return &wsMsg, nil
|
return &wsMsg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HandleMessage 处理 Kafka 消息
|
||||||
func (h *MessageHandler) HandleMessage(message *kafkago.Message) error {
|
func (h *MessageHandler) HandleMessage(message *kafkago.Message) error {
|
||||||
// 解析并打印格式化的 JSON
|
// 解析并打印格式化的 JSON
|
||||||
prettyJSON, err := h.parseJSONMessage(message.Value)
|
prettyJSON, err := h.parseJSONMessage(message.Value)
|
||||||
|
|||||||
@ -21,7 +21,7 @@ type Client struct {
|
|||||||
Topics map[string]bool
|
Topics map[string]bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewWebSocketService new a WebSocket service.
|
// NewWebSocketService 创建 WebSocket 服务
|
||||||
func NewWebSocketService(uc *biz.WebSocketUsecase) *WebSocketService {
|
func NewWebSocketService(uc *biz.WebSocketUsecase) *WebSocketService {
|
||||||
return &WebSocketService{
|
return &WebSocketService{
|
||||||
uc: uc,
|
uc: uc,
|
||||||
@ -29,7 +29,7 @@ func NewWebSocketService(uc *biz.WebSocketUsecase) *WebSocketService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleMessage handles incoming WebSocket messages.
|
// HandleMessage 处理 WebSocket 消息
|
||||||
func (s *WebSocketService) HandleMessage(ctx context.Context, message []byte) error {
|
func (s *WebSocketService) HandleMessage(ctx context.Context, message []byte) error {
|
||||||
return s.uc.HandleMessage(ctx, message)
|
return s.uc.HandleMessage(ctx, message)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user