[go] 웹 소켓 통신

웹 소켓은 실시간 양방향 통신을 제공하는 프로토콜로, 클라이언트와 서버 간에 데이터를 주고받을 수 있습니다. Go 언어로 웹 소켓 통신을 구현하려면 gorilla/websocket 패키지를 사용할 수 있습니다.

패키지 설치

먼저, gorilla/websocket 패키지를 설치합니다.

go get github.com/gorilla/websocket

서버 구현

다음은 Go를 사용하여 웹 소켓 서버를 구현하는 예시 코드입니다.

package main

import (
	"log"
	"net/http"

	"github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
	ReadBufferSize:  1024,
	WriteBufferSize: 1024,
}

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		log.Println("웹 소켓 연결 설정 오류:", err)
		return
	}
	defer conn.Close()

	for {
		messageType, message, err := conn.ReadMessage()
		if err != nil {
			log.Println("메시지 수신 오류:", err)
			return
		}
		log.Printf("받은 메시지: %s\n", message)

		err = conn.WriteMessage(messageType, message)
		if err != nil {
			log.Println("메시지 송신 오류:", err)
			return
		}
	}
}

func main() {
	http.HandleFunc("/ws", handleWebSocket)
	http.ListenAndServe(":8080", nil)
}

위의 코드에서 handleWebSocket 함수는 웹 소켓 연결을 처리하며, 메시지를 수신하고 다시 보내는 예제를 포함하고 있습니다.

클라이언트 구현

다음은 HTML과 JavaScript를 사용하여 간단한 웹 소켓 클라이언트를 구현하는 예시 코드입니다.

<!DOCTYPE html>
<html>

<head>
  <title>웹 소켓 클라이언트</title>
</head>

<body>
  <input type="text" id="messageInput">
  <button onclick="sendMessage()">전송</button>

  <script>
    const socket = new WebSocket("ws://localhost:8080/ws");

    socket.onopen = (event) => {
      console.log("웹 소켓 연결 성공");
    };

    socket.onmessage = (event) => {
      console.log("받은 메시지: " + event.data);
    };

    function sendMessage() {
      const message = document.getElementById("messageInput").value;
      socket.send(message);
    }
  </script>
</body>

</html>

위의 코드는 웹 소켓을 이용하여 서버에 메시지를 전송하고 받는 간단한 클라이언트를 구현한 것입니다.

이제 Go 언어를 사용하여 웹 소켓 통신을 구현하는 방법에 대해 간단히 알아보았습니다. 참고 문헌에 자세한 내용이 있으니 참고하시기 바랍니다!