本期将会继续上次话题,上篇主要是理论还是停留在文字层面,今天带来的是websocket实操,分享它使用和底层实现!
相信很多使用Golang的小伙伴都知道Gorilla这个工具包,长久以来gorilla/websocket 都是比官方包更好的websocket包。
题外话 gorilla:大猩猩(不过这个猩猩还挺可爱的)
图片
gorilla/websocket 框架开源地址为: https://github.com/gorilla/websocket
今天小许就用【gorilla/websocket】框架来展开本期文章内容,文章会涉及到核心代码的走读,会涉及到不少代码,需要小伙伴们保持耐心往下看,然后结合之前分享的websocket基础,彻底学个明白!
图片
安装Gorilla Websocket Go软件包,您只需要使用即可go get
go get github.com/gorilla/websocket
在正式使用之前我们先简单了解下两个数据结构 Upgrader 和 Conn
Upgrader指定用于将 HTTP 连接升级到 WebSocket 连接
type Upgrader struct { HandshakeTimeout time.Duration ReadBufferSize, WriteBufferSize int WriteBufferPool BufferPool Subprotocols []string Error func(w http.ResponseWriter, r *http.Request, status int, reason error) CheckOrigin func(r *http.Request) bool EnableCompression bool}
这里一般会设置下CheckOrigin来解决跨域问题
Conn类型表示WebSocket连接,这个结构体的组成包括两部分,写入字段(Write fields)和 读取字段(Read fields)
type Conn struct { conn net.Conn isServer bool ... // Write fields writeBuf []byte writePool BufferPool writeBufSize int writer io.WriteCloser isWriting bool ... // Read fields readRemaining int64 readFinal bool readLength int64 messageReader *messageReader ...}
isServer :字段来区分我们是否用Conn作为客户端还是服务端,也就是说说gorilla/websocket中同时编写客户端程序和服务器程序,但是一般是Web应用程序使用单独的前端作为客户端程序。
部分字段说明如下图:
图片
出于说明的目的,我们将在Go中同时编写客户端程序和服务端程序(其实小许是前端小趴菜
本文链接:http://www.28at.com/showinfo-26-37263-0.html慢聊Golang的websocket使用和实现代码分析
声明:本网页内容旨在传播知识,不代表本站观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。