>백엔드 개발 >Golang >Go 언어를 사용하여 Websocket 채팅방을 개발하는 방법

Go 언어를 사용하여 Websocket 채팅방을 개발하는 방법

PHPz
PHPz원래의
2023-12-14 13:46:50906검색

Go 언어를 사용하여 Websocket 채팅방을 개발하는 방법

Go 언어를 사용하여 Websocket 채팅방을 개발하는 방법

Websocket은 한 번의 연결로 서버와 클라이언트 간의 양방향 통신을 가능하게 하는 실시간 통신 프로토콜입니다. Websocket은 실시간 메시지 교환이 가능하고 효율적인 성능을 제공하므로 채팅방을 개발할 때 매우 좋은 선택입니다. 이 기사에서는 Go 언어를 사용하여 간단한 Websocket 채팅방을 개발하는 방법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다.

1. 준비

1. Go 언어 환경 설치

시작하기 전에 먼저 Go 언어 환경을 설치해야 합니다. Go 언어 공식 홈페이지(https://golang.org/)에서는 플랫폼별 설치 패키지를 제공하고 있으며, 자신의 운영체제에 맞게 다운로드하여 설치할 수 있습니다.

2. websocket 라이브러리 설치

Go 언어에서는 "github.com/gorilla/websocket" 패키지를 사용하여 WebSocket 관련 기능을 제공합니다. 패키지는 다음 명령을 통해 설치할 수 있습니다:

go get github.com/gorilla/websocket

2. 채팅방 서버 만들기

먼저 Websocket 연결 및 메시지 설정을 처리할 간단한 서버를 만들어야 합니다. 보내고 받습니다.

package main

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

    "github.com/gorilla/websocket"
)

var clients = make(map[*websocket.Conn]bool) // 存储连接的客户端
var broadcast = make(chan Message)           // 消息广播通道

// 定义消息结构体
type Message struct {
    Username string `json:"username"`
    Message  string `json:"message"`
}

func main() {
    http.HandleFunc("/ws", handleConnections)

    go handleMessages()

    // 启动服务器
    log.Println("服务器启动,监听端口:8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

func handleConnections(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP连接为Websocket连接
    ws, err := websocket.Upgrade(w, r, nil, 1024, 1024)
    if err != nil {
        log.Fatal(err)
    }

    // 关闭连接
    defer ws.Close()

    // 将客户端连接添加到clients映射中
    clients[ws] = true

    for {
        var msg Message
        // 读取客户端发送的消息
        err := ws.ReadJSON(&msg)
        if err != nil {
            log.Printf("读取消息错误:%v", err)
            delete(clients, ws)
            break
        }

        // 将接收到的消息放入广播通道中
        broadcast <- msg
    }
}

func handleMessages() {
    for {
        // 从广播通道中读取消息
        msg := <-broadcast

        // 遍历所有连接的客户端,将消息发送给每个客户端
        for client := range clients {
            err := client.WriteJSON(msg)
            if err != nil {
                log.Printf("发送消息错误:%v", err)
                client.Close()
                delete(clients, client)
            }
        }
    }
}

위 코드는 간단한 웹소켓 채팅방 서버를 생성합니다. handleConnections 함수에서 수신된 메시지를 브로드캐스트 채널에 넣습니다. handleMessages 함수는 브로드캐스트 채널에서 메시지를 읽고 이를 연결된 모든 클라이언트에 보냅니다. handleConnections函数中,我们将接收到的消息放入广播通道中。handleMessages函数从广播通道中读取消息,并将消息发送给所有连接的客户端。

三、创建前端界面

接下来,我们需要创建一个前端界面,用于用户输入用户名和消息,并实时显示聊天内容。

<!doctype html>
<html>

<head>
  <title>Websocket 聊天室</title>
  
  <style>
    #message-box {
      height: 500px;
      overflow-y: scroll;
    }
  </style>
</head>

<body>
  <h1>Websocket 聊天室</h1>

  <div id="message-box"></div>

  <form id="message-form" onsubmit="sendMessage(event)">
    <input type="text" id="username" placeholder="请输入用户名" required>
    <br />
    <input type="text" id="message" placeholder="请输入消息" required>
    <br />
    <button type="submit">发送</button>
  </form>

  <script>
    const socket = new WebSocket("ws://localhost:8080/ws");

    socket.onmessage = function (event) {
      const data = JSON.parse(event.data);
      const messageBox = document.getElementById("message-box");
      const messageElement = document.createElement("p");
      messageElement.innerText = data.username + ": " + data.message;
      messageBox.appendChild(messageElement);
    };

    function sendMessage(event) {
      event.preventDefault();

      const username = document.getElementById("username").value;
      const message = document.getElementById("message").value;

      const data = {
        username: username,
        message: message
      };

      socket.send(JSON.stringify(data));
      document.getElementById("message").value = "";
    }
  </script>
</body>

</html>

以上代码创建了一个简单的HTML界面,包含一个用户名输入框、一个消息输入框和一个发送按钮。通过socket.onmessage处理接收到的消息,并将消息显示在消息盒子中。通过socket.send发送输入的消息。

四、运行程序

在终端中进入项目目录,执行以下命令启动服务器:

go run main.go

然后,在浏览器中打开index.html

3. 프런트 엔드 인터페이스 만들기

다음으로 사용자가 사용자 이름과 메시지를 입력하고 채팅 콘텐츠를 실시간으로 표시할 수 있는 프런트 엔드 인터페이스를 만들어야 합니다. 🎜rrreee🎜위 코드는 사용자 이름 입력 상자, 메시지 입력 상자 및 보내기 버튼을 포함하는 간단한 HTML 인터페이스를 만듭니다. socket.onmessage를 통해 수신된 메시지를 처리하고 메시지 상자에 메시지를 표시합니다. socket.send를 통해 입력 메시지를 보냅니다. 🎜🎜4. 프로그램 실행 🎜🎜 터미널에 프로젝트 디렉터리를 입력하고 다음 명령을 실행하여 서버를 시작합니다. 🎜rrreee🎜 그런 다음 브라우저에서 index.html 페이지를 열고 사용자 이름과 메시지를 입력하고 보내기를 클릭하세요. 🎜🎜위의 단계를 통해 Go 언어를 사용한 간단한 Websocket 채팅방 개발에 성공했습니다. 실제 개발에서는 채팅 기록, 비공개 메시지 등 더 많은 기능이 추가될 수 있습니다. 이 글이 Websocket 채팅방 개발을 위해 Go 언어를 이해하고 배우는 데 도움이 되기를 바랍니다. 🎜

위 내용은 Go 언어를 사용하여 Websocket 채팅방을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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