Golang Go语言实现100行代码的WebSocket聊天室

发布于 1周前 作者 ionicwang 来自 Go语言

100 行实现一个聊天室,只是一个展示,界面比较丑

V2EX 的帖子竟然不能传图。

传送门: https://github.com/chrislonng/starx-chat-demo


Golang Go语言实现100行代码的WebSocket聊天室
12 回复

更多关于Golang Go语言实现100行代码的WebSocket聊天室的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


最近在学 go ,支持一下

为什么别人能传图,你不能

可能没有用洪荒之力

楼主头像漂亮

能不能只关注代码, 前女友照片, 一直没有换

B 装得给 150 分

好想也有这么个前女友

实现一个基本的WebSocket聊天室,在Go语言中可以利用gorilla/websocket库。以下是一个简化的实现示例,它展示了如何用不到100行代码创建一个简单的WebSocket聊天服务器和客户端。

首先,确保你已经安装了gorilla/websocket库:

go get github.com/gorilla/websocket

然后,可以使用以下代码实现服务器:

package main

import (
    "fmt"
    "net/http"
    "github.com/gorilla/websocket"
    "sync"
)

var upgrader = websocket.Upgrader{}
var clients = make(map[*websocket.Conn]struct{})
var mutex = &sync.Mutex{}

func handler(w http.ResponseWriter, r *http.Request) {
    conn, _ := upgrader.Upgrade(w, r, nil)
    defer conn.Close()
    mutex.Lock()
    clients[conn] = struct{}{}
    mutex.Unlock()
    for {
        msgType, msg, err := conn.ReadMessage()
        if err != nil {
            break
        }
        mutex.Lock()
        for client := range clients {
            if client != conn {
                client.WriteMessage(msgType, msg)
            }
        }
        mutex.Unlock()
    }
    mutex.Lock()
    delete(clients, conn)
    mutex.Unlock()
}

func main() {
    http.HandleFunc("/chat", handler)
    http.ListenAndServe(":8080", nil)
}

这个代码段创建了一个简单的WebSocket服务器,监听8080端口,并允许客户端通过/chat路径连接。服务器会将收到的消息广播给所有其他连接的客户端。请注意,这个示例未包含错误处理和并发控制的最佳实践,实际项目中应进一步完善。

回到顶部