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

zinterface是一些接口的定义

znet就是接口的具体实现

IServer.go

  1. package zinterface
  2.  
  3. type IServer interface{
  4. Start()
  5. Stop()
  6. Server()
  7. }

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

  1. package znet
  2.  
  3. import (
  4. "fmt"
  5. "log"
  6. "net"
  7. "zinx/zinterface"
  8. )
  9.  
  10. type Server struct {
  11. Name string
  12. IP string
  13. IPversion string
  14. Port int
  15. }
  16.  
  17. func (s *Server) Start() {
  18. log.Printf("%s %s:%d start...\n", s.Name, s.IP, s.Port)
  19. addr, err := net.ResolveTCPAddr(s.IPversion, fmt.Sprintf("%s:%d", s.IP, s.Port))
  20. if err != nil {
  21. log.Println("resolve tcp addr err ", err)
  22. return
  23. }
  24. listener, err := net.ListenTCP(s.IPversion, addr)
  25. if err != nil {
  26. log.Println("listen tcp err ", err)
  27. return
  28. }
  29. go func() {
  30. for {
  31. conn, err := listener.AcceptTCP()
  32. if err != nil {
  33. log.Println("accept tcp err ", err)
  34. continue
  35. }
  36. go func() {
  37.  
  38. for {
  39. b := make([]byte, )
  40. len, err := conn.Read(b)
  41. if err != nil {
  42. log.Println("read tcp err ", err)
  43. continue
  44. }
  45. if _, err := conn.Write(b[:len]); err != nil {
  46. log.Println("write tcp err ", err)
  47. continue
  48. }
  49. }
  50. }()
  51. }
  52. }()
  53.  
  54. }
  55. func (s *Server) Stop() {
  56.  
  57. }
  58. func (s *Server) Server() {
  59. s.Start()
  60. select{}
  61. }
  62. func NewServer(name string) zinterface.IServer {
  63. s := &Server{
  64. Name: name,
  65. IP: "0.0.0.0",
  66. IPversion: "tcp4",
  67. Port: ,
  68. }
  69. return s
  70. }

单独在src下创建测试目录

server.go

  1. package main
  2.  
  3. import (
  4. "zinx/znet"
  5. )
  6. func main() {
  7. server:=znet.NewServer("[zinx]")
  8. server.Server()
  9. }

[Go] 轻量服务器框架基础TCP服务模块的更多相关文章

  1. [Go] 轻量服务器框架基础TCP连接的抽象和封装

    对tcp连接部分以及与连接绑定的业务部分进行抽象和封装 主要是对连接的开启关闭和读写进行封装,抽象出接口,使用回调进行具体业务的绑定 zinterface/iconnection.go package ...

  2. [Go] 轻量服务器框架tcp的粘包问题 封包与拆包

    tcp传输的数据是以流的形式传输的,因此就没有办法判断到哪里结束算是自己的一个消息,这样就会出现粘包问题,多个包粘在一起了 可以使用这样一个自定义的形式来解决,一个消息分为 head+body  he ...

  3. [Go] 轻量服务器框架全局配置的实现以及解析json

    在一个应用中经常需要有一个配置文件,可以对代码中的参数进行配置,可以使用一个json文件来对应一个struct的对象,进行全局配置 建一个conf/zinx.json作为配置文件 { "Na ...

  4. 基于netty轻量的高性能分布式RPC服务框架forest<上篇>

    工作几年,用过不不少RPC框架,也算是读过一些RPC源码.之前也撸过几次RPC框架,但是不断的被自己否定,最近终于又撸了一个,希望能够不断迭代出自己喜欢的样子. 顺便也记录一下撸RPC的过程,一来作为 ...

  5. 基于netty轻量的高性能分布式RPC服务框架forest<下篇>

    基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开 ...

  6. 阿里云轻量服务器价格及轻量与ECS服务器区别比较

    https://yq.aliyun.com/articles/221647 摘要: 阿里云轻量应用服务器价格表及介绍,关于轻量应用服务器和ECS服务器的性能对比 阿里云轻量应用服务器是阿里云新推出的服 ...

  7. Android轻量缓存框架--ASimpleCache

    [转] 大神真面目 稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! ...

  8. Cardinal:一个用于移动项目开发的轻量 CSS 框架

    Cardinal 是一个适用于移动项目的 CSS 框架,包含很多有用的默认样式.矢量字体.可重用的模块以及一个简单的响应式模块系统.Cardinal 提供了一种在多种移动设备上实现可伸缩的字体和布局的 ...

  9. 腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群

    总结记录/朱季谦 最近买了一台4核16的腾讯云轻量应用服务器,花了我快四百的大洋,打算搭建一堆docker组件集群,最先开始是通过docker搭建redis集群,计划使用三个端口,分别是7001,70 ...

随机推荐

  1. MYSQL“错误代码#1045 Access denied for user 'root'@'********8' (using password:YES)”

    用IP远程连接数据库时报这个错误,我查看了下数据库是否开启了远程连接,已经开了,服务也启动着,网上的方法都是重置密码修改权限之类的,我发现都没用,我看了一下数据库所在的电脑,IP地址变了,然后真相了.

  2. ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports

    Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...

  3. HDU1529-Casher Emploryment(最最...最经典的差分约束 差分约束-最长路+将环变线)

    A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its n ...

  4. FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题

    FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题 此问题困扰我很近,终于在最近的项目调整中总结了规律并解决了. 因为之前对sdram并不熟悉,用得也不是太多,于是 ...

  5. 【JS】395-重温基础:事件

    本文是 重温基础 系列文章的第二十篇. 这是第三个基础系列的第一篇,欢迎持续关注呀!重温基础 系列的[初级]和[中级]的文章,已经统一整理到我的[Cute-JavaScript](http://js. ...

  6. Centos 8 安装 Nginx

    安装步骤: /* 1. 安装编译工具及库文件 */ yum -y install gcc automake autoconf libtool make && yum install g ...

  7. Kubernetes基本概念和术语之《Master和Node》

    Kubernetes中的大部分概念如Node.Pod.Replication Controller.Service等都可以看作一种“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的k ...

  8. Vue大纲

    Vue框架 Vue ---- vue的基本使用 文本/事件/属性指令 补充: js面向对象 js函数 Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性 Vue --- ...

  9. let和const总结(ES6)

    文章目录 let const 1. let要好好用 1. 基本用法 2. let声明的变量不存在变量提升 3. TDZ(temporal dead zone)暂时性死区 4. 不允许重复声明 2. 块 ...

  10. JS---另一个定时器:一次性的

    之前学的定时器:setInterval和清除定时器 clearInterval(定时器id); //常用的,反复的执行 window.setInterval(function () { alert(& ...