Zinx-V0.1基础server

ZinxV0.1-基础server

实现了简单的读写功能
1.zinx最基本的两个模块ziface和znet

​ ziface主要是存放一些Zinx框架的全部模块的抽象层接口类,Zinx框架的最基本的是服务类接口iserver,定义在ziface模块中。

​ znet模块是zinx框架中网络相关功能的实现,所有网络相关模块都会定义在znet模块中。

2.ziface

抽象了server的方法:

启动服务器(开始监听) Start()

关闭服务器(停止监听) Stop()

运行服务器-启动业务方法 Serve()

type IServer interface {
	//启动服务器
	Start()
	//停止服务器
	Stop()
	//运行服务器
	Serve()
}
3.znet

创建server结构体,实现初始化server模块的函数,实现了IServer的方法

type Server struct {
	//服务器ip
	IPVersion string
	IP string
	//服务器port
	Port int
	//服务器名称
	Name string
}
//初始化的New方法
func NewServer(name string) ziface.IServer{
	s := &Server{
		Name:name,
		IPVersion:"tcp4",
		IP:"0.0.0.0",
		Port:8999,
	}

	return s
}
//启动服务器
//原生socket 服务器编程
func (s *Server) Start() {
	fmt.Printf("[start] Server Linstenner at IP :%s, Port :%d, is starting..\n", s.IP, s.Port)

	//1 创建套接字  :得到一个TCP的addr
	addr, err := net.ResolveTCPAddr(s.IPVersion, fmt.Sprintf("%s:%d", s.IP, s.Port))
	if err != nil {
		fmt.Println("resolve tcp addr error:", err)
		return
	}
	//2 监听服务器地址
	listenner, err := net.ListenTCP(s.IPVersion, addr)
	if err != nil {
		fmt.Println("listen ", s.IPVersion, " err , ", err)
		return
	}

	//3 阻塞等待客户端发送请求,
	go func() {
		for {
			//阻塞等待客户端请求,
			conn, err := listenner.Accept()//
			if err != nil {
				fmt.Println("Accept err", err)
				continue
			}

			//此时conn就已经和对端客户端连接
			go func() {
				//4 客户端有数据请求,处理客户端业务(读、写)
				for {
					buf := make([]byte, 512)
					cnt, err := conn.Read(buf)
                    if cnt == 0 {
                        fmt.Println("client outline")
                        break
                    }
					if err != nil && err != io.EOF {
						fmt.Println("recv buf err", err)
						continue
					}
					fmt.Printf("recv client buf %s, cnt = %d\n", buf, cnt)

					//回显功能 (业务)
					if _, err := conn.Write(buf[:cnt]); err != nil {
						fmt.Println("write back buf err", err)
						continue
					}
				}
			}()
		}
	}()

}
//停止服务器
func (s *Server) Stop() {
	//TODO 将一些服务器资源进行回收...
}
//运行服务器
func (s *Server )Serve() {
	//启动server的监听功能
	s.Start()//并不希望他永久的阻塞

	//TODO  做一些其他的扩展
	//阻塞//告诉CPU不再需要处理的,节省cpu资源
	select{}//main函数不退出
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值