>  기사  >  백엔드 개발  >  golang Websocket 튜토리얼: 온라인 제출 기능을 개발하는 방법

golang Websocket 튜토리얼: 온라인 제출 기능을 개발하는 방법

王林
王林원래의
2023-12-17 10:23:211087검색

golang Websocket教程:如何开发在线投稿功能

Golang Websocket 튜토리얼: 온라인 제출 기능 개발 방법

소개:
인터넷의 급속한 발전으로 인해 실시간 통신 기능을 구현해야 하는 애플리케이션이 점점 더 많아지고 있습니다. 네트워크 애플리케이션에서 Websocket 기술은 일반적으로 사용되는 통신 프로토콜이 되었습니다. 이 기사의 목적은 독자들에게 Golang 언어를 사용하여 온라인 제출 기능을 개발하고 Websocket을 사용하여 실시간 상호 작용을 달성하는 방법을 가르치는 것입니다.

1. Websocket 소개
Websocket은 실시간 통신을 위해 브라우저와 서버 간에 지속적인 연결을 설정할 수 있는 전이중 통신 프로토콜입니다. 기존 HTTP 프로토콜과 비교하여 Websocket은 대기 시간이 낮고 처리량이 높으며 실시간 데이터를 처리하는 애플리케이션 시나리오에 적합합니다.

2. 개발 환경 설정
개발을 시작하기 전에 Golang 개발 환경을 설정해야 합니다.

  1. Golang 설치: 공식 웹사이트 https://golang.org/doc/install을 방문하여 운영 체제에 적합한 Golang 버전을 다운로드하여 설치하세요.
  2. 관련 라이브러리 설치:

    go get github.com/gorilla/websocket

3. 프로젝트 구조 설계
온라인 제출 기능을 개발하기 전에 프로젝트의 디렉터리 구조를 계획해야 합니다.

- main.go
- handler.go
- template
  - index.html

4. 코드 구현

  1. main.go

    package main
    
    import (
        "html/template"
        "log"
        "net/http"
    
        "github.com/gorilla/websocket"
    )
    
    var (
        upgrader = websocket.Upgrader{}
        clients  = make(map[*websocket.Conn]bool)
        broadcast = make(chan []byte)
        homeTemplate *template.Template
    )
    
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        homeTemplate.Execute(w, nil)
    }
    
    func websocketHandler(w http.ResponseWriter, r *http.Request) {
        conn, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Println(err)
            return
        }
        defer conn.Close()
    
        clients[conn] = true
    
        for {
            _, msg, err := conn.ReadMessage()
            if err != nil {
                log.Println(err)
                delete(clients, conn)
                return
            }
            broadcast <- msg
        }
    }
    
    func handleMessages() {
        for {
            msg := <-broadcast
            for client := range clients {
                err := client.WriteMessage(websocket.TextMessage, msg)
                if err != nil {
                    log.Println(err)
                    client.Close()
                    delete(clients, client)
                }
            }
        }
    }
    
    func main() {
        // 配置文件路径
        homeTemplate = template.Must(template.ParseFiles("template/index.html"))
    
        http.HandleFunc("/", homeHandler)
        http.HandleFunc("/ws", websocketHandler)
    
        go handleMessages()
    
        err := http.ListenAndServe(":8080", nil)
        if err != nil {
            log.Fatal(err)
        }
    }
  2. handler.go

    package main
    
    import (
        "net/http"
        "path/filepath"
    )
    
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        filePath, _ := filepath.Abs("template/index.html")
        http.ServeFile(w, r, filePath)
    }
  3. template/index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>在线投稿功能</title>
    </head>
    <body>
        <h1>在线投稿功能</h1>
        <textarea id="message-input" rows="5" cols="30"></textarea>
        <button id="send-btn">发送</button>
        <br>
        <ul id="message-list"></ul>
    </body>
    <script>
        var socket = new WebSocket("ws://localhost:8080/ws");
        socket.onmessage = function (event) {
            var messageList = document.getElementById("message-list");
            var messageItem = document.createElement("li");
            messageItem.innerText = event.data;
            messageList.appendChild(messageItem);
        };
    
        document.getElementById("send-btn").addEventListener("click", function () {
            var messageInput = document.getElementById("message-input");
            var message = messageInput.value;
            socket.send(message);
        });
    </script>
    </html>

5. 명령을 입력하세요 line 프로젝트 디렉터리에서 다음 명령을 실행하여 서버를 시작합니다.

go run main.go
  1. 브라우저를 열고 http://localhost:8080/ 주소를 입력하여 페이지에 액세스합니다.

  2. 6. 요약
  3. 위의 과정을 거쳐 Golang 기반의 온라인 제출 기능 개발을 완료했습니다. Websocket을 통해 실시간 메시지 전달이 구현되며, 사용자가 텍스트 상자에 메시지를 입력하고 보내기 버튼을 클릭하면 해당 메시지가 서버로 전송되어 즉시 페이지에 표시될 수 있습니다.
웹소켓 관련 기술을 계속해서 배우고 실습하면 개발에 더 많은 가능성과 혁신이 생길 것입니다. 독자들이 이 기사의 지침을 활용하여 Golang을 더 잘 사용하여 보다 실시간 및 대화형 네트워크 애플리케이션을 개발할 수 있기를 바랍니다.

위 내용은 golang Websocket 튜토리얼: 온라인 제출 기능을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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