
golang
zboyco
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
go-server 一个在学习中形成的socket服务
go-server 项目地址:https://github.com/zboyco/go-server go-server 是我在学习golang的过程中,从最简单的socket一步一步改造形成的。 目前功能如下: 普通的tcp功能(废话) 使用标准库bufio.Scanner实现拆包,可以直接使用bufio.Scanner内置的拆包协议 提供普通OnMessage和命令路由两种使用模式 采用实现...原创 2020-02-14 17:40:44 · 947 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(十)
添加Session容器,增加超时自动关闭Session功能 本文代码查看github: https://github.com/zboyco/go-server/tree/step-10 要实现超时管理,就需要有个地方保存所有的会话(session),我们采用 map 来存储所有的 session ,因为 session 的保存不需要顺序,同时也有删除和增加的功能,map 正好适合. 增加一个池结构...原创 2020-02-13 15:08:10 · 242 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(九)
采用标准库scanner实现数据分离处理粘包 参考http://feixiao.github.io/2016/05/08/bufio/ 使用标准库scanner实现数据分离处理粘包 本文代码查看github: https://github.com/zboyco/go-server/tree/step-9 直接使用scanner处理粘包,不用管理buffer,相对更加简单 修改socket.go中...原创 2020-02-13 15:07:29 · 327 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(八)
session中Read方法实现粘包拆包处理 定义简单协议,数据包头由4字节构成: 第1位固定为’$’ 第2-3位为Body长度(uint16) 第4位固定为’#’ 接收数据时若第1位和第4位不正确则认为接收到异常数据,同时关闭socket连接 本文代码查看github: https://github.com/zboyco/go-server/tree/step-8 为了实现粘包拆包处理,我们自...原创 2020-02-13 15:05:41 · 389 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(七)
Session增加唯一ID,拆分socket中的Read方法 增加ID为了以后判断闲置超时; 拆分Read方法方便扩展协议 本文代码查看github: https://github.com/zboyco/go-server/tree/step-7 修改AppSession结构体,增加ID和activeDateTime属性,为超时管理做准备 //客户端结构体 type AppSession st...原创 2020-02-13 15:04:47 · 300 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(六)
增加AppSession结构体 OnMessage返回AppSession结构体,提供Send方法,服务器可以主动向客户端发送数据 本文代码查看github: https://github.com/zboyco/go-server/tree/step-6 新建一个AppSession结构体,将客户端会话放在AppSession中,方便扩展和管理 在server目录中增加client.go文件 代...原创 2020-02-13 15:04:08 · 244 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(五)
将读取的数据处理方法作为参数传入server中 将 OnMessage 和 OnError 通过Server结构公开变量传入 本文代码查看github: https://github.com/zboyco/go-server/tree/step-5 项目结构如下: |-go-server |-server |-socket.go socket.go 中,Server结构增加两个方法,用来输出接...原创 2020-02-13 15:03:33 · 256 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(四)
将创建socket的方法放入单独的包中 本文代码查看github: https://github.com/zboyco/go-server/tree/step-4 修改以下项目结构,将之前的代码放到server包中,main.go中直接调用就行了 项目结构如下: |-go-server |-server |-socket.go socket.go 中增加一个结构体,增加一个工厂函数用来返回一个...原创 2020-02-13 15:02:54 · 241 阅读 · 1 评论 -
Go实现简单的Socket服务端笔记(三)
利用goroutine实现同时多个客户端连接 将数据读取放入单独的方法中,利用goroutine运行 本文代码查看github: https://github.com/zboyco/go-server/tree/step-3 要实现多个客户端连接,需要将每个客户端放入单独的线程处理,通常我们使用多线程实现这个功能,但Go语言提供的 goroutine, 可以非常方便的实现并行(goroutine并...原创 2020-02-13 15:02:20 · 279 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(二)
第二步 循环读取数据 利用for循环,等待客户端发送数据 本文代码查看github: https://github.com/zboyco/go-server/tree/step-2 修改上一步的代码,让服务端循环接收客户端发送的消息,主要使用for循环,直接上代码 package main import ( "fmt" "net" ) func main() { //定义一个本机端口...原创 2020-02-13 15:01:26 · 235 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(一)
###第一步 实现socket服务 简单实现一个socket服务,能接收客户端连接并接收数据 本文代码查看github: https://github.com/zboyco/go-server/tree/step-1 Go语言的socket服务由标准库 net 提供,主要就使用三个方法. ResolveTCPAddr 用于获取一个TCPAddr ListenTCP 开始监听 Accep...原创 2020-02-13 15:00:46 · 515 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(零)
说明 最近开始学习Go语言,尝试写一个简单的Socket服务端,计划实现以下一些功能: 监听单个端口,支持多个客户端连接 定义简单的协议,实现粘包拆包处理 能设置会话闲置超时时间,周期性关闭超时的会话 记录会话连接,关闭,错误日志 还没想好 下面一步步的实现吧,我是新手 项目地址:https://github.com/zboyco/go-server ...原创 2020-02-12 18:54:00 · 224 阅读 · 0 评论