[go] Go 언어의 웹 소켓 프로그래밍
Go 언어는 빠른 속도와 효율적인 동시성 처리로 인기 있는 프로그래밍 언어입니다. 웹 소켓은 양방향 통신을 지원하여 웹 애플리케이션에서 실시간 데이터를 주고받는 데 사용됩니다. Go 언어로 웹 소켓을 구현하는 방법을 살펴봅시다.
1. 웹 소켓 라이브러리 설치
Go 언어에서는 gorilla/websocket 라이브러리를 사용하여 웹 소켓을 구현할 수 있습니다. 아래 명령을 사용하여 라이브러리를 설치합니다.
go get github.com/gorilla/websocket
2. 웹 소켓 서버 구현
다음은 Go 언어를 사용하여 간단한 웹 소켓 서버를 구현하는 예제 코드입니다.
package main
import (
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func websocketHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
// error handling
}
// 클라이언트로부터 메시지 수신
for {
_, msg, err := conn.ReadMessage()
if err != nil {
// error handling
break
}
// 메시지 처리
}
}
func main() {
http.HandleFunc("/ws", websocketHandler)
http.ListenAndServe(":8080", nil)
}
3. 웹 소켓 클라이언트 구현
웹 소켓 클라이언트를 구현하는 방법은 브라우저 측 JavaScript를 사용하거나 다른 언어로 구현할 수 있습니다. Go 언어로 웹 소켓 클라이언트를 구현하는 방법은 다음과 같습니다.
package main
import (
"log"
"net/url"
"os"
"github.com/gorilla/websocket"
)
func main() {
u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"}
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
// error handling
}
defer c.Close()
// 서버로 메시지 전송
err = c.WriteMessage(websocket.TextMessage, []byte("Hello, world!"))
if err != nil {
// error handling
}
// 서버로부터 메시지 수신
_, msg, err := c.ReadMessage()
if err != nil {
// error handling
}
log.Printf("Received: %s", msg)
}
이러한 방식으로 Go 언어를 사용하여 웹 소켓을 구현할 수 있습니다. 더 많은 기능을 추가하여 실제 프로젝트에 적용해 보세요!
본 포스팅은 gorilla/websocket 및 A Beginner’s Guide to WebSockets를 참고하여 작성되었습니다.