//功能简介
/*
1.广播功能, 用户上线下线 广播所有在线用户 某某用户下线
2.改名功能 输入rename|newname 可以更改自己的昵称
3.查看当前在线用户功能 输入who 可列表当前在线用户
4.聊天功能, 任一连接成员, 发送消息, 广播所有用户, 类似于群聊
5.超时自动退出
*/
package main
import (
"fmt"
"net"
"strings"
"time"
)
// 线上用户结构体
type Client struct {
C chan string //通信,发送数据对当前用户
Name string
Addr string
}
func clientHandler(conn net.Conn) {
defer conn.Close()
// 加入到在线用户列表中
remoteAddr := conn.RemoteAddr().String()
client := Client{make(chan string), "phpxxo", remoteAddr}
onlieMap[remoteAddr] = client
//向当前用户发送消息
go writeMsgToClient(client, conn)
//广播用户上线
message <- makeMsg(client, "login success")
conn.Write([]byte(makeMsg(client, "i am here")))
clientExit := make(chan bool)
hasData := make(chan bool)
//监听用户消息
go func() {
buf := make([]byte, 1024)
for {
n, err := conn.Read(buf)
if n == 0 {
clientExit <- true
fmt.Pri
golang实现匿名聊天后台并发处理服务器
最新推荐文章于 2023-01-11 11:00:34 发布
本文介绍了如何使用Go语言(golang)构建一个能够并发处理大量连接的匿名聊天室后台。通过利用Go的协程(goroutine)和通道(channel)特性,实现了高效且稳定的即时通讯功能。
摘要由CSDN通过智能技术生成