golang
zboyco
这个作者很懒,什么都没留下…
展开
-
go-server 一个在学习中形成的socket服务
go-server项目地址:https://github.com/zboyco/go-servergo-server 是我在学习golang的过程中,从最简单的socket一步一步改造形成的。目前功能如下:普通的tcp功能(废话)使用标准库bufio.Scanner实现拆包,可以直接使用bufio.Scanner内置的拆包协议提供普通OnMessage和命令路由两种使用模式采用实现...原创 2020-02-14 17:40:44 · 876 阅读 · 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 · 189 阅读 · 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 · 254 阅读 · 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 · 338 阅读 · 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 · 247 阅读 · 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 · 178 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(五)
将读取的数据处理方法作为参数传入server中将 OnMessage 和 OnError 通过Server结构公开变量传入本文代码查看github:https://github.com/zboyco/go-server/tree/step-5项目结构如下:|-go-server|-server |-socket.gosocket.go 中,Server结构增加两个方法,用来输出接...原创 2020-02-13 15:03:33 · 200 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(四)
将创建socket的方法放入单独的包中本文代码查看github:https://github.com/zboyco/go-server/tree/step-4修改以下项目结构,将之前的代码放到server包中,main.go中直接调用就行了项目结构如下:|-go-server|-server |-socket.gosocket.go 中增加一个结构体,增加一个工厂函数用来返回一个...原创 2020-02-13 15:02:54 · 189 阅读 · 1 评论 -
Go实现简单的Socket服务端笔记(三)
利用goroutine实现同时多个客户端连接将数据读取放入单独的方法中,利用goroutine运行本文代码查看github:https://github.com/zboyco/go-server/tree/step-3要实现多个客户端连接,需要将每个客户端放入单独的线程处理,通常我们使用多线程实现这个功能,但Go语言提供的 goroutine, 可以非常方便的实现并行(goroutine并...原创 2020-02-13 15:02:20 · 197 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(二)
第二步 循环读取数据利用for循环,等待客户端发送数据本文代码查看github:https://github.com/zboyco/go-server/tree/step-2修改上一步的代码,让服务端循环接收客户端发送的消息,主要使用for循环,直接上代码package mainimport ( "fmt" "net")func main() { //定义一个本机端口...原创 2020-02-13 15:01:26 · 182 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(一)
###第一步 实现socket服务简单实现一个socket服务,能接收客户端连接并接收数据本文代码查看github:https://github.com/zboyco/go-server/tree/step-1Go语言的socket服务由标准库 net 提供,主要就使用三个方法.ResolveTCPAddr用于获取一个TCPAddrListenTCP开始监听Accep...原创 2020-02-13 15:00:46 · 442 阅读 · 0 评论 -
Go实现简单的Socket服务端笔记(零)
说明最近开始学习Go语言,尝试写一个简单的Socket服务端,计划实现以下一些功能:监听单个端口,支持多个客户端连接定义简单的协议,实现粘包拆包处理能设置会话闲置超时时间,周期性关闭超时的会话记录会话连接,关闭,错误日志还没想好下面一步步的实现吧,我是新手项目地址:https://github.com/zboyco/go-server...原创 2020-02-12 18:54:00 · 178 阅读 · 0 评论