在Golang中,可以使用net包实现一个多人聊天室。代码示例:
go
// 客户端
type client struct {
conn net.Conn // 连接
name string // 用户名
}
// 客户端列表
var clients = make(map[net.Conn]*client)
// 广播消息到所有客户端
func broadcast(msg string) {
for _, client := range clients {
_, err := client.conn.Write([]byte(msg))
if err != nil {
// ...
}
}
}
// 处理客户端连接
func handleConn(conn net.Conn) {
// 读取客户端用户名
msg := make([]byte, 512)
_, err := conn.Read(msg)
// 将新的客户端添加到客户端列表
clients[conn] = &client{
conn: conn,
name: string(msg),
}
// 广播新加入信息
broadcast(clients[conn].name + " joined the chat!\n")
// 广播聊天信息
go func() {
for {
n, err := conn.Read(msg)
if n == 0 || err != nil {
// 客户端退出
delete(clients, conn)
broadcast(clients[conn].name + " left the chat.\n")
return
}
// 广播消息
broadcast(clients[conn].name + ": " + string(msg[:n]) + "\n")
}
}()
}
func main() {
// 监听端口
listener, err := net.Listen("tcp", ":8000")
if err != nil {
log.Fatal(err)
}
// 处理客户端连接
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal(err)
}
go handleConn(conn)
}
}
这个聊天室会监听TCP端口,接收客户端连接并将其添加到clients列表。它会在一个goroutine中处理每个客户端,广播聊天消息和客户端加入/退出的信息。这个示例实现了一个简单的多人聊天室。