meopin-top / convey-your-mind-WSS

마음을 전해요. 백엔드(WSS)
0 stars 0 forks source link

[WSS] 웹소켓 서버 구조 정리 #5

Open j1mmyson opened 1 year ago

j1mmyson commented 1 year ago
  1. 유저가 GET /ws/{paper_id} 요청을 보내면 프로토콜 확인 이후 웹소켓 연결.
    
    // 프로토콜 체크
    app.Use("/ws", func(c *fiber.Ctx) error {
    if websocket.IsWebSocketUpgrade(c) {
      return c.Next()
    }
    return fiber.ErrUpgradeRequired
    })

// 웹소켓 연결 app.Get("/ws/:paper_id", websocket.New(func(c *websocket.Conn) { paperID := c.Params("paper_id")

// 함수가 종료되면 웹소켓 연결 끊김 defer func() { c.Close() }()

doSomething() }))

2. `doSomething()`에서 해주어야 할 것?
  - 유저가 페이퍼 구독
    - `map[string] []*websocket.Conn`
    - key = `papaer_id`, value = `array of websocket Connection`
    - 위 딕셔너리에 유저 커넥션 추가
```go
paperMap := make(map[string] []*websocket.Conn)
paperID := c.Params("paper_id")
val, exists := paperMap[paperID]
if exists {
  paperMap[channelID] = append(val, c)
} else {
  paperMap[channelID] = []*websocket.Conn{c}
}

}



- 레디스와 빈번한 통신 필요
  - Redis Connection Pooling
  - or wss에서 in-memory db사용하는 방법