웹소켓 라우팅 정의
마지막으로 웹 서버에 웹소켓이 연결되면 새로운 클라이언트를 생성하는 웹소켓 라우팅을 정의해 보자.
▼ 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() 메서드로 웹소켓을 생성하고 새 클라이언트를 만들도록 핸들러를 등록했다.