即时通信系统 -- V0.1 基础server构建

跟着b站上刘丹冰Aceld大佬开始做go项目
image

  1. 创建server结构体,要有server的Ip和Port两个变量
type Server struct {
	Ip   string
	Port int
}
  1. 创建一个server的接口
func NewServer(ip string, port int) *Server {
	server := &Server{
		Ip:        ip,
		Port:      port,
	}
	return server
}
  1. 启用服务器接口
func (this *Server) Start() {
	//sorket listen
	listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", this.Ip, this.Port))
	if err != nil {
		fmt.Println("net.Listen err:", err)
		return
	}
	//close listen socket
	defer listener.Close()

	for {
		//accept
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("listener accept err", err)
			continue
		}

		//do handler
		go this.Handler(conn)
	}
}

  1. 当前连接要做的业务
func (this *Server) Handler(conn net.Conn) {
	//当前连接的业务
	fmt.Println("连接建立成功")
}
  1. main函数创建一个服务器进行测试
package main

func main() {
	server := NewServer("127.0.0.1", 8888)
	server.Start()
}

总结

  1. 结构体若希望被别的包能访问到,名字首字母要大写
  2. net.Listen()用于创建一个服务器,监听指定的网络协议和端口号。net.Listen(“tcp”, “:8080”)会创建一个TCP服务器,监听8080端口。net.Listen()函数返回一个Listener对象,它可以用于接受和关闭连接。
    如果在端口号前加上ip地址,表示只监听该ip上的该端口号。如果不写则表示监听所有指定端口号
  3. 关闭 listener 最好在创建后就在后面
    defer listener.Close()
posted @ 2023-03-05 22:34  hzy0227  阅读(20)  评论(0编辑  收藏  举报