Golang 웹소켓 개발 가이드: 다중 사용자 온라인 일정 관리 기능 구현
소개:
현대 생활의 빠른 속도와 멀티 태스킹 요구 사항으로 인해 일정을 조정하고 조정해야 하는 경우가 많습니다. 다인 온라인 일정 관리 기능을 통해 여러 사람이 실시간으로 협업하고 일정을 공유할 수 있어 업무 효율성이 향상됩니다. 이 기사에서는 Golang 및 Websocket 기술을 사용하여 다중 사용자 온라인 일정 관리 기능을 구현하는 방법을 소개하고 구체적인 코드 예제를 첨부합니다.
프로젝트 생성 및 초기화:
먼저 빈 Golang 프로젝트를 생성하여 프로젝트 루트 디렉터리에 배치해야 합니다. 다음 명령을 사용하여 새 Go 모듈을 초기화합니다.
go mod init schedule
그런 다음 프로젝트에 필요한 종속성을 도입해야 합니다.
go get -u github.com/gin-gonic/gin go get -u github.com/gorilla/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连接,并获取到与客户端建立的连接。
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
来存储所有连接。当有新的连接建立时,我们将该连接添加到映射表中。同时,我们通过一个无限循环来读取来自客户端的消息,并将该消息广播给所有连接。
index.html
<!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>
/ws
경로에 Websocket 경로를 등록했습니다. 라우팅 처리 기능에서는 업그레이드 HTTP 연결을 Websocket 연결로 업그레이드하고 클라이언트와 설정된 연결을 얻습니다.
웹소켓 서버에서는 연결 처리 및 메시지 브로드캐스팅 기능을 구현해야 합니다. 경로 처리 함수에 다음 코드를 추가합니다.
위 코드에서는 connections
매핑 테이블을 사용하여 모든 연결을 저장합니다. 새로운 연결이 설정되면 매핑 테이블에 연결을 추가합니다. 동시에 우리는 무한 루프를 통해 클라이언트로부터 메시지를 읽고 메시지를 모든 연결에 브로드캐스트합니다.
index.html
라는 파일을 만들고 파일에 다음 코드를 추가합니다. 위 내용은 golang 웹소켓 개발 가이드: 다중 사용자 온라인 일정 관리 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!