이 기사에서는 실시간 WebSocket 애플리케이션의 백엔드 구현을 살펴보겠습니다. Gin 및 Go를 사용하여 구축된 백엔드는 WebSocket 연결을 효율적으로 관리하고, 메시지를 저장하며, 연결된 모든 클라이언트에 업데이트를 브로드캐스트합니다.
https://github.com/tom-takeru/web-socket-demo
제 백엔드 프로젝트는 모듈성과 재사용성을 보장하도록 구성되었습니다. 다음은 업데이트된 디렉토리 구조입니다:
./backend ├── go.mod ├── go.sum ├── main.go └── stores └── messages.go
main.go는 WebSocket 서버 애플리케이션의 주요 진입점입니다. Gin 라우터를 설정하고 WebSocket 경로를 정의하며 WebSocket 수명 주기를 처리합니다.
package main import ( "encoding/json" "net/http" "sync" "time" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "github.com/tom-takeru/web-socket-demo/backend/stores" ) var ( upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { origin := r.Header.Get("Origin") // NOTE: This project is for local development only. return origin == "http://localhost:3000" }, } messageStore = stores.NewMessageStore() clients = make(map[*websocket.Conn]bool) clientsMu sync.Mutex ) func handleWebSocket(c *gin.Context) { conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to upgrade to WebSocket"}) return } defer conn.Close() clientsMu.Lock() clients[conn] = true clientsMu.Unlock() // Send existing messages to the new connection for _, msg := range messageStore.MarshalMessages() { conn.WriteMessage(websocket.TextMessage, msg) } for { _, message, err := conn.ReadMessage() if err != nil { break } var msgData map[string]string if err := json.Unmarshal(message, &msgData); err != nil { break } timestamp := time.Now().Format(time.RFC3339) msgData["timestamp"] = timestamp messageStore.AddMessage(msgData) modifiedMessage, err := json.Marshal(msgData) if err != nil { break } clientsMu.Lock() for client := range clients { if err := client.WriteMessage(websocket.TextMessage, modifiedMessage); err != nil { client.Close() delete(clients, client) } } clientsMu.Unlock() } clientsMu.Lock() delete(clients, conn) clientsMu.Unlock() } func main() { r := gin.Default() r.GET("/ws", handleWebSocket) r.Run("localhost:8080") }
WebSocket 데모 애플리케이션의 백엔드 구현에서는 Gin 및 Go를 사용하여 실시간 통신을 효과적으로 관리하는 방법을 보여줍니다. 지속적인 연결과 스레드로부터 안전한 메시지 저장소를 위해 WebSocket을 활용함으로써 이 애플리케이션은 실시간 웹 애플리케이션 구축을 위한 강력한 기반 역할을 합니다.
다음 글에서는 배포 전략과 WebSocket 성능 최적화에 대해 논의하겠습니다.
위 내용은 WebSocket을 사용한 실시간 웹 애플리케이션 데모 - 백엔드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!