前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Go] 轻量服务器框架基础TCP服务模块

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

作者头像
唯一Chat
发布2019-12-19 19:24:06
1.9K0
发布2019-12-19 19:24:06
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

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

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下创建测试目录

server.go

package main

import (
    "zinx/znet"
)
func main()  {
    server:=znet.NewServer("[zinx]")
    server.Server()
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档