golang websocket 聊天室

发布时间:2024-12-23 03:28:08

随着互联网的迅猛发展,实时性和即时通讯成为了当下非常热门的话题。而Websocket技术作为一种全双工、实时通讯的解决方案,被广泛应用于聊天室、在线游戏等实时通信场景。本文将介绍如何使用Golang构建一个简单的Websocket聊天室。

搭建基本框架

首先,我们需要创建一个基本的Golang项目,作为聊天室的后端服务端。在命令行中执行以下指令:

mkdir websocket-chatroom
cd websocket-chatroom
go mod init github.com/yourusername/websocket-chatroom

接下来,我们需要引入gorilla/websocket库来实现Websocket功能。在项目目录下创建一个main.go文件,并将以下内容复制到文件中:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

// ...

func main() {
    http.HandleFunc("/ws", handleWebSocket)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

处理Websocket连接

在这一部分,我们将实现handleWebSocket函数来处理传入的Websocket连接请求,并保存连接状态实现消息的收发。

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP协议为Websocket协议
    upgrader := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    // 处理收到的消息
    go func() {
        defer conn.Close()
        for {
            messageType, p, err := conn.ReadMessage()
            if err != nil {
                log.Println(err)
                return
            }

            // 简单打印收到的消息并回复
            log.Printf("收到消息:%s\n", string(p))
            err = conn.WriteMessage(messageType, p)
            if err != nil {
                log.Println(err)
                return
            }
        }
    }()
}

构建前端界面

最后一步是我们构建一个简单的前端界面,用于测试聊天室功能。创建一个index.html文件,并添加以下内容:

<!DOCTYPE html>
<html>

<head>
    <title>Golang Websocket 聊天室</title>
</head>

<body>
    <input id="message" type="text" placeholder="输入消息" />
    <button onclick="sendMessage()">发送消息</button>
    <div id="messages"></div>

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

        socket.onmessage = function(event) {
            var messages = document.getElementById("messages");
            messages.innerHTML += "<p>" + event.data + "</p>";
        }

        function sendMessage() {
            var messageInput = document.getElementById("message");
            socket.send(messageInput.value);
            messageInput.value = "";
        }
    </script>
</body>

</html>

在本地启动Golang后端服务,在浏览器中打开index.html,即可看到一个简单的聊天室界面。输入消息后点击发送按钮,消息将通过Websocket连接发送到后端并返回,然后在界面上展示出来。

以上就是使用Golang构建Websocket聊天室的所有步骤,我们通过引入gorilla/websocket库处理Websocket连接,并在前端页面实现消息的收发。希望这篇文章能帮助你快速入门Golang Websocket开发!

相关推荐