>백엔드 개발 >Golang >golang 웹소켓 개발 가이드: 다중 사용자 온라인 일정 관리 기능 구현

golang 웹소켓 개발 가이드: 다중 사용자 온라인 일정 관리 기능 구현

WBOY
WBOY원래의
2023-12-02 09:09:26671검색

golang Websocket开发指南:实现多人在线日程管理功能

Golang 웹소켓 개발 가이드: 다중 사용자 온라인 일정 관리 기능 구현

소개:
현대 생활의 빠른 속도와 멀티 태스킹 요구 사항으로 인해 일정을 조정하고 조정해야 하는 경우가 많습니다. 다인 온라인 일정 관리 기능을 통해 여러 사람이 실시간으로 협업하고 일정을 공유할 수 있어 업무 효율성이 향상됩니다. 이 기사에서는 Golang 및 Websocket 기술을 사용하여 다중 사용자 온라인 일정 관리 기능을 구현하는 방법을 소개하고 구체적인 코드 예제를 첨부합니다.

  1. 환경 및 종속성:
  2. Golang 1.13 이상
  3. Gin 웹 프레임워크
  4. Gorilla Websocket 라이브러리
  5. 프로젝트 생성 및 초기화:
    먼저 빈 Golang 프로젝트를 생성하여 프로젝트 루트 디렉터리에 배치해야 합니다. 다음 명령을 사용하여 새 Go 모듈을 초기화합니다.

    go mod init schedule

그런 다음 프로젝트에 필요한 종속성을 도입해야 합니다.

go get -u github.com/gin-gonic/gin
go get -u github.com/gorilla/websocket
  1. Websocket 서버 생성:
    다음으로 다중 구현을 위한 Websocket 서버를 생성합니다. - 개인별 온라인 일정관리 기능. 프로젝트의 루트 디렉터리에 main.go라는 파일을 생성하고 파일에 다음 코드를 추가합니다. main.go的文件,并在文件中添加以下代码:
package main

import (
    "log"
    "net/http"

    "github.com/gin-gonic/gin"
    "github.com/gorilla/websocket"
)

func main() {
    router := gin.Default()

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

    router.GET("/ws", func(c *gin.Context) {
        conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
        if err != nil {
            log.Println("Failed to upgrade connection:", err)
            return
        }

        // TODO: 处理连接和消息
    })

    router.Run(":8000")
}

上述代码中,我们使用了Gin框架创建了一个简单的HTTP服务器,并在/ws路径上注册了一个Websocket路由。在路由处理函数中,我们将Upgrade HTTP连接升级为Websocket连接,并获取到与客户端建立的连接。

  1. 处理连接和消息:
    在我们的Websocket服务器中,我们需要实现对连接的处理和消息的广播功能。在路由处理函数中添加以下代码:
connections := make(map[*websocket.Conn]bool) // 存储所有连接的映射表

router.GET("/ws", func(c *gin.Context) {
    conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
    if err != nil {
        log.Println("Failed to upgrade connection:", err)
        return
    }

    connections[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println("Error reading message:", err)
            delete(connections, conn)
            conn.Close()
            break
        }

        // 广播消息给所有连接
        for conn := range connections {
            err := conn.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println("Error broadcasting message:", err)
                delete(connections, conn)
                conn.Close()
            }
        }
    }
})

上面的代码中,我们使用一个映射表connections来存储所有连接。当有新的连接建立时,我们将该连接添加到映射表中。同时,我们通过一个无限循环来读取来自客户端的消息,并将该消息广播给所有连接。

  1. 前端实现:
    最后,我们需要在前端实现一个简单的界面来测试我们的多人在线日程管理功能。在项目的根目录下,创建一个名为index.html
  2. <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Schedule</title>
    </head>
    
    <body>
        <h1>Schedule</h1>
    
        <input type="text" id="message" placeholder="Enter your message">
        <button id="send">Send</button>
    
        <ul id="messages"></ul>
    
        <script>
            const socket = new WebSocket("ws://localhost:8000/ws");
    
            const messageInput = document.getElementById("message");
            const sendButton = document.getElementById("send");
            const messagesList = document.getElementById("messages");
    
            sendButton.addEventListener("click", () => {
                const message = messageInput.value;
                socket.send(message);
                messageInput.value = "";
            });
    
            socket.addEventListener("message", (event) => {
                const message = document.createElement("li");
                message.innerHTML = event.data;
                messagesList.appendChild(message);
            });
        </script>
    </body>
    
    </html>
위 코드에서는 Gin 프레임워크를 사용하여 간단한 HTTP를 생성했습니다. 서버에 접속하고 /ws 경로에 Websocket 경로를 등록했습니다. 라우팅 처리 기능에서는 업그레이드 HTTP 연결을 Websocket 연결로 업그레이드하고 클라이언트와 설정된 연결을 얻습니다.

    연결 및 메시지 처리:

    웹소켓 서버에서는 연결 처리 및 메시지 브로드캐스팅 기능을 구현해야 합니다. 경로 처리 함수에 다음 코드를 추가합니다.

    rrreee

    위 코드에서는 connections 매핑 테이블을 사용하여 모든 연결을 저장합니다. 새로운 연결이 설정되면 매핑 테이블에 연결을 추가합니다. 동시에 우리는 무한 루프를 통해 클라이언트로부터 메시지를 읽고 메시지를 모든 연결에 브로드캐스트합니다.

      프런트엔드 구현:
    • 마지막으로 다중 사용자 온라인 일정 관리 기능을 테스트하기 위해 프런트엔드에 간단한 인터페이스를 구현해야 합니다. 프로젝트의 루트 디렉터리에 index.html라는 파일을 만들고 파일에 다음 코드를 추가합니다.
    • rrreee
    • 위 코드에서는 JavaScript의 WebSocket 개체를 사용하여 서버와 통신합니다. 연결을 설정하고 사용자 입력 및 서버 메시지를 수신합니다. 사용자가 보내기 버튼을 클릭하면 입력한 메시지를 서버로 보냅니다. 동시에 서버로부터 메시지가 수신되면 해당 메시지를 인터페이스의 메시지 목록에 추가합니다.
    🎜요약:🎜이 글에서는 Golang과 Websocket 기술을 사용하여 다중 사용자 온라인 일정 관리 기능을 구현하는 방법을 소개합니다. 먼저 Websocket 서버를 생성하고 연결 처리 및 메시지 브로드캐스트 기능을 구현했습니다. 그런 다음 기능을 테스트하기 위해 프런트 엔드에 간단한 인터페이스를 구현했습니다. 이 기사를 통해 독자들이 유사한 기능을 달성하기 위해 Golang과 Websocket을 사용하는 방법과 기술을 이해하고 숙달할 수 있기를 바랍니다. 🎜🎜참조 링크:🎜🎜🎜Gin 프레임워크: https://github.com/gin-gonic/gin🎜🎜Gorilla Websocket 라이브러리: https://github.com/gorilla/websocket🎜🎜

    위 내용은 golang 웹소켓 개발 가이드: 다중 사용자 온라인 일정 관리 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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