使用Golang的net包实现TCP聊天室需监听端口、管理连接、广播消息;2. 每个客户端连接由独立goroutine处理,通过channel广播消息;3. clients map用sync.Mutex保护,确保并发安全;4. handleBroadcast持续监听broadcast channel,将消息发送给所有在线客户端。

要使用Golang的
net
服务器需要做几件事:
使用一个
map
channel
map
sync.Mutex
package main
<p>import (
"bufio"
"fmt"
"net"
"strings"
"sync"
)</p><p>type Client struct {
conn net.Conn
name string
}</p><p>var (
clients = make(map[net.Conn]*Client)
mu sync.Mutex
broadcast = make(chan string)
)
启动一个独立的goroutine监听广播channel,并将消息发送给所有客户端。
立即学习“go语言免费学习笔记(深入)”;
func handleBroadcast() {
for {
msg := <-broadcast
mu.Lock()
for _, client := range clients {
go func(c *Client) {
_, _ = c.conn.Write([]byte(msg + "\n"))
}(client)
}
mu.Unlock()
}
}
每个客户端连接启动一个goroutine,读取输入并发送到广播channel。首次输入作为用户名。
func handleClient(conn net.Conn) {
defer conn.Close()
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">scanner := bufio.NewScanner(conn)
// 第一条消息作为用户名
if !scanner.Scan() {
return
}
username := strings.TrimSpace(scanner.Text())
if username == "" {
username = conn.RemoteAddr().String()
}
mu.Lock()
clients[conn] = &Client{conn: conn, name: username}
mu.Unlock()
// 通知所有人有新用户加入
broadcast <- fmt.Sprintf("[系统] %s 加入了聊天室", username)
// 读取消息并广播
for scanner.Scan() {
text := strings.TrimSpace(scanner.Text())
if text == "" {
continue
}
broadcast <- fmt.Sprintf("%s: %s", username, text)
}
// 用户离开
mu.Lock()
delete(clients, conn)
mu.Unlock()
broadcast <- fmt.Sprintf("[系统] %s 离开了聊天室", username)}
主函数中监听端口,接受连接,并启动广播处理器。
func main() {
listener, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
defer listener.Close()
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">fmt.Println("聊天服务器启动,监听 :8080")
// 启动广播goroutine
go handleBroadcast()
for {
conn, err := listener.Accept()
if err != nil {
continue
}
go handleClient(conn)
}}
运行这个程序后,可以用
telnet localhost 8080
基本上就这些。不复杂但容易忽略细节,比如连接关闭时的资源清理、并发安全、空消息处理等。这个版本已经具备基础功能,可在此基础上扩展私聊、房间、命令等功能。
以上就是如何使用Golang的net包实现一个支持多用户的TCP聊天室服务器的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号