더북(TheBook)

웹소켓 라우팅 정의

마지막으로 웹 서버에 웹소켓이 연결되면 새로운 클라이언트를 생성하는 웹소켓 라우팅을 정의해 보자.

▼ main.go

package main
 
import (
    /* ... */
    "github.com/gorilla/websocket"
    /* ... */
)
 
const socketBufferSize = 1024
 
var (
    upgrader = &websocket.Upgrader{
        ReadBufferSize: socketBufferSize,
        WriteBufferSize: socketBufferSize,
    }
)
 
func main() {
    // 라우터 생성
    router := httprouter.New()
     
    /* ... */
     
    router.GET("/ws/:room_id", func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
        socket, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Fatal("ServeHTTP:", err)
            return
        }
        newClient(socket, ps.ByName("room_id"), GetCurrentUser(r))
    })
     
    /* ... */
}

웹소켓을 사용하려면 websocket.Upgrader 타입을 사용하여 HTTP 커넥션이 웹소켓 프로토콜을 사용할 수 있게 해줘야 한다. /ws/:room_id 형태로 웹 요청이 들어오면 upgrader.Upgrade() 메서드로 웹소켓을 생성하고 새 클라이언트를 만들도록 핸들러를 등록했다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.