[go] Go 언어로 웹소켓을 사용하여 실시간 캘린더 애플리케이션 만들기

목차

소개

웹소켓을 사용하여 실시간으로 일정을 공유하는 캘린더 애플리케이션을 만들어보겠습니다. Go 언어를 사용하여 백엔드 서버와 웹소켓 클라이언트를 구현할 것입니다.

필요한 패키지 설치

먼저, 아래 명령어를 사용하여 gorilla/websocket 패키지를 설치합니다.

go get github.com/gorilla/websocket

이 패키지는 Go 언어로 웹소켓을 구현할 때 사용됩니다.

웹소켓 서버 구현

다음은 웹소켓 서버를 구현하는 예제 코드입니다.

package main

import (
	"log"
	"net/http"

	"github.com/gorilla/websocket"
)

var clients = make(map[*websocket.Conn]bool)
var broadcast = make(chan []byte)
var upgrader = websocket.Upgrader{}

func handleConnections(w http.ResponseWriter, r *http.Request) {
	// Upgrade initial GET request to a websocket
	ws, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		log.Fatal(err)
	}
	// Register new client
	clients[ws] = true
}

func handleMessages() {
	for {
		// Send message to all clients
		msg := <-broadcast
		for client := range clients {
			err := client.WriteMessage(websocket.TextMessage, msg)
			if err != nil {
				log.Printf("Error: %v", err)
				client.Close()
				delete(clients, client)
			}
		}
	}
}

func main() {
	// Configure the upgrader
	upgrader.CheckOrigin = func(r *http.Request) bool {
		return true
	}
	// Create a simple file server
	fs := http.FileServer(http.Dir("public"))
	http.Handle("/", fs)
	// Handle websocket connections
	http.HandleFunc("/ws", handleConnections)
	// Start listening for incoming chat messages
	go handleMessages()
	// Start the server on localhost port 8000 and log any errors
	log.Println("http server started on :8000")
	err := http.ListenAndServe(":8000", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

웹소켓 클라이언트 구현

웹소켓 클라이언트를 구현하는 예제 코드입니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WebSocket Calendar</title>
</head>
<body>
    <div id="calendar"></div>

    <script>
        const socket = new WebSocket('ws://localhost:8000/ws');

        socket.onopen = () => {
            console.log('Connected to the WebSocket server');
        };

        socket.onmessage = (event) => {
            console.log('Message received from server:', event.data);
            // Update calendar with received event data
            // ...
        };

        socket.onclose = () => {
            console.log('Disconnected from the WebSocket server');
        };
    </script>
</body>
</html>

결론

위의 예제 코드를 참고하여 Go 언어로 웹소켓을 사용한 실시간 캘린더 애플리케이션을 구현할 수 있습니다. 실제 애플리케이션에서는 더 많은 기능과 안전성을 고려해야 합니다.