>백엔드 개발 >Golang >Go 언어로 네트워크 프로그래밍 기능을 배우고 WebSocket 서버 채팅방을 구현하시겠습니까?

Go 언어로 네트워크 프로그래밍 기능을 배우고 WebSocket 서버 채팅방을 구현하시겠습니까?

王林
王林원래의
2023-07-30 18:43:54918검색

Go 언어로 네트워크 프로그래밍 기능을 배우고 WebSocket 서버 채팅방 구현

소개
인터넷의 급속한 발전과 함께 웹 애플리케이션은 사람들의 삶에 없어서는 안될 부분이 되었습니다. 실시간 통신을 달성하는 것은 웹 애플리케이션의 중요한 구성 요소 중 하나입니다. WebSocket은 양방향 통신을 제공하고 브라우저와 서버 간에 지속적인 연결을 설정할 수 있는 프로토콜입니다. 이 기사에서는 Go 언어의 네트워크 프로그래밍 기능을 사용하고 이를 WebSocket 프로토콜과 결합하여 간단한 채팅방 서버를 구현하는 방법을 소개합니다.

준비
코드 작성을 시작하기 전에 Go 언어 개발 환경을 설치하고 Go의 기본 구문을 이해해야 합니다. 또한 WebSocket 프로토콜 처리를 단순화하려면 오픈 소스 WebSocket 라이브러리를 사용해야 합니다. 라이브러리는 다음 명령을 사용하여 설치할 수 있습니다.

go get github.com/gorilla/websocket

Codeimplementation
먼저 필요한 패키지를 가져와야 합니다.

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

다음으로 WebSocket 연결을 위한 업그레이드 프로그램을 정의합니다. 업그레이드 프로그램은 HTTP 연결을 WebSocket 연결로 업그레이드하는 http.HandlerFunc입니다.

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

그런 다음 채팅방 서버를 나타내는 구조를 정의합니다.

type ChatRoom struct {
    clients   map[*websocket.Conn]bool
    broadcast chan []byte
}

func newChatRoom() *ChatRoom {
    return &ChatRoom{
        clients:   make(map[*websocket.Conn]bool),
        broadcast: make(chan []byte),
    }
}

다음으로 채팅방 서버의 메서드를 구현합니다. 첫 번째는 WebSocket 연결 업그레이드 및 메시지 처리를 처리하는 데 사용되는 handlerWebSocket 함수입니다.

func (c *ChatRoom) handleWebSocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    c.clients[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            delete(c.clients, conn)
            break
        }

        c.broadcast <- msg
    }

    defer conn.Close()
}

그런 다음 연결된 모든 클라이언트에 메시지를 브로드캐스트하는 데 사용되는 BroadcastMessage 함수를 구현합니다.

func (c *ChatRoom) broadcastMessage() {
    for {
        msg := <-c.broadcast

        for client := range c.clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(c.clients, client)
            }
        }
    }
}

마지막으로 기본 구현 채팅방 서버 시작 기능:

func main() {
    room := newChatRoom()

    go room.broadcastMessage()

    http.HandleFunc("/ws", room.handleWebSocket)

    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}

Run
코드 디렉터리에서 다음 명령을 실행하여 채팅방 서버를 시작합니다.

go run main.go

그런 다음 브라우저에서 http://localhost:8080을 방문하고 브라우저의 개발자 도구를 열고 콘솔 전환 WebSocket 탭으로 이동하여 다음 JavaScript 코드를 사용하여 서버에 연결합니다.

var socket = new WebSocket("ws://localhost:8080/ws");

socket.onopen = function(event) {
  console.log("Connected to the server");
};

socket.onmessage = function(event) {
  console.log("Received message: " + event.data);
};

socket.onclose = function(event) {
  console.log("Disconnected from the server");
};

socket.send("Hello, server!");

이제 브라우저와 서버 간에 실시간 양방향 통신이 가능합니다.

요약
Go 언어로 네트워크 프로그래밍 기능을 학습하고 WebSocket 프로토콜과 결합하여 간단한 채팅방 서버를 구현했습니다. WebSocket은 브라우저와 서버 간에 지속적인 연결을 설정하여 실시간 통신을 달성할 수 있습니다. Golang의 네트워크 프로그래밍 기능을 사용하면 WebSocket 연결 및 메시지 전송을 쉽게 처리할 수 있습니다. 이 기사가 Go 언어로 네트워크 프로그래밍과 WebSocket을 배우는 데 도움이 되기를 바랍니다.

위 내용은 Go 언어로 네트워크 프로그래밍 기능을 배우고 WebSocket 서버 채팅방을 구현하시겠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.