前段时间用go写了一个简单的聊天室,后来考虑到任何人都可以随意加入聊天室这个问题,我就加上了一个服务端控制客户接入的功能,调整了服务端的代码。
相比原聊天室,调整了一下几个方面:
①增加了获取客户端验证信息,控制是否允许接入聊天室。
②增加服务器监听客户端聊天记录、广播信息。
③抽取了控制管道信息输出的handleMsg方法和控制客户端输入的handleClient方法。
package main
import (
"bufio"
"fmt"
"log"
"net"
"os"
"strings"
"time"
)
//创建结构体存储用户名称、信息和时间
type chatMsg struct {
name string
msg string
t string
}
var (
msg = make(chan string) //用于新用户加入时广播信息
chatMsgs = make(chan chatMsg) //发送聊天信息
exit = make(chan chatMsg) //离开信息
login = make(chan string)
clients = make(map[string]net.Conn) //定义一个map,使用用户名作为key,value该用户的链接
logins = make(map[string]net.Conn) //定义一个map,使用