欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[Go] 轻量服务器框架基础TCP服务模块

程序员文章站 2023-09-28 23:04:42
框架要先把整体的结构定义好,一般都是在$GOPATH目录的src下建立自己的目录 zinterface是一些接口的定义 znet就是接口的具体实现 IServer.go server.go一个tcp服务端的基本业务,简单的原样回显 单独在src下创建测试目录 server.go ......

框架要先把整体的结构定义好,一般都是在$gopath目录的src下建立自己的目录

[Go] 轻量服务器框架基础TCP服务模块

 

 zinterface是一些接口的定义

znet就是接口的具体实现

iserver.go

package zinterface

type iserver interface{
    start()
    stop()
    server()
}

server.go一个tcp服务端的基本业务,简单的原样回显

package znet

import (
    "fmt"
    "log"
    "net"
    "zinx/zinterface"
)

type server struct {
    name      string
    ip        string
    ipversion string
    port      int
}

func (s *server) start() {
    log.printf("%s %s:%d start...\n", s.name, s.ip, s.port)
    addr, err := net.resolvetcpaddr(s.ipversion, fmt.sprintf("%s:%d", s.ip, s.port))
    if err != nil {
        log.println("resolve tcp addr err ", err)
        return
    }
    listener, err := net.listentcp(s.ipversion, addr)
    if err != nil {
        log.println("listen tcp err ", err)
        return
    }
    go func() {
        for {
            conn, err := listener.accepttcp()
            if err != nil {
                log.println("accept tcp err ", err)
                continue
            }
            go func() {

                for {
                    b := make([]byte, 512)
                    len, err := conn.read(b)
                    if err != nil {
                        log.println("read tcp err ", err)
                        continue
                    }
                    if _, err := conn.write(b[:len]); err != nil {
                        log.println("write tcp err ", err)
                        continue
                    }
                }
            }()
        }
    }()

}
func (s *server) stop() {

}
func (s *server) server() {
    s.start()
    select{}
}
func newserver(name string) zinterface.iserver {
    s := &server{
        name:      name,
        ip:        "0.0.0.0",
        ipversion: "tcp4",
        port:      8999,
    }
    return s
}

单独在src下创建测试目录

[Go] 轻量服务器框架基础TCP服务模块

 

 server.go

package main

import (
    "zinx/znet"
)
func main()  {
    server:=znet.newserver("[zinx]")
    server.server()
}