服务器的目录结构
服务器main.go
主函数只负责监听,等待客户端连接和初始化的工作,然后启一个协程进行业务处理
func main() {
fmt.Println("服务器在新的8889端口监听....")
listen, err := net.Listen("tcp", "0.0.0.0:8889")
defer listen.Close()
if err != nil {
fmt.Println("net.Listen err=", err)
return
}
for {
fmt.Println("等待客户端来链接服务器.....")
conn, err := listen.Accept()
if err != nil {
fmt.Println("listen.Accepe err=", err)
}
go process(conn)
}
}
process函数启了一个processor模块
func process(conn net.Conn) {
defer conn.Close()
processor := &Processor{
Conn: conn,
}
processor.process2()
}
在同一个目录下有一个processor函数模块, processor模块接收数据,启动服务函数serverProcessMes函数
package main
import (
"fmt"
"go_dev/chatRoom/common/message"
process2 "go_dev/chatRoom/server/process"
"go_dev/chatRoom/server/utils"
"io"
"net"
)
type Processor struct {
Conn net.Conn
}
func (this *Processor) serverProcessMes(mes *message.Message) (err error) {
switch mes.Type {
case message.LoginMesType:
// 处理登陆
up := &process2.UserProcess{
Conn: this.Conn,
}
err = up.ServerProcessLogin(mes)
case message.RegisterMesType:
// 处理注册
default:
fmt.Println("消息类型不存在, 无法处理...")
}
return
}
func (this *Processor) process2() {
for {
tf := &utils.Transfer{
Conn: this.Conn,
}
mes, err := tf.ReadPkg()
if err != nil {
if err == io.EOF {
fmt.Pr