慢聊Golang的websocket使用和实现代码分析
2023-12-04 09:21:08 软件 237观看
摘要本期将会继续上次话题,上篇主要是理论还是停留在文字层面,今天带来的是websocket实操,分享它使用和底层实现!相信很多使用Golang的小伙伴都知道Gorilla这个工具包,长久以来gorilla/websocket 都是比官方包更好的websocket

本期将会继续上次话题,上篇主要是理论还是停留在文字层面,今天带来的是websocket实操,分享它使用和底层实现!oeS28资讯网——每日最新资讯28at.com

相信很多使用Golang的小伙伴都知道Gorilla这个工具包,长久以来gorilla/websocket 都是比官方包更好的websocket包。oeS28资讯网——每日最新资讯28at.com

题外话 gorilla:大猩猩(不过这个猩猩还挺可爱的)oeS28资讯网——每日最新资讯28at.com

图片图片oeS28资讯网——每日最新资讯28at.com

gorilla/websocket 框架开源地址为: https://github.com/gorilla/websocketoeS28资讯网——每日最新资讯28at.com

今天小许就用【gorilla/websocket】框架来展开本期文章内容,文章会涉及到核心代码的走读,会涉及到不少代码,需要小伙伴们保持耐心往下看,然后结合之前分享的websocket基础,彻底学个明白!oeS28资讯网——每日最新资讯28at.com

图片图片oeS28资讯网——每日最新资讯28at.com

简单使用

安装Gorilla Websocket Go软件包,您只需要使用即可go getoeS28资讯网——每日最新资讯28at.com

go get github.com/gorilla/websocket

在正式使用之前我们先简单了解下两个数据结构 Upgrader 和 ConnoeS28资讯网——每日最新资讯28at.com

Upgrader

Upgrader指定用于将 HTTP 连接升级到 WebSocket 连接oeS28资讯网——每日最新资讯28at.com

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}
  • • HandshakeTimeout:握手完成的持续时间
  • • ReadBufferSize和WriteBufferSize:以字节为单位指定I/O缓冲区大小。如果缓冲区大小为零,则使用HTTP服务器分配的缓冲区
  • • CheckOrigin :函数应仔细验证请求来源 防止跨站点请求伪造

这里一般会设置下CheckOrigin来解决跨域问题oeS28资讯网——每日最新资讯28at.com

Conn

Conn类型表示WebSocket连接,这个结构体的组成包括两部分,写入字段(Write fields)和 读取字段(Read fields)oeS28资讯网——每日最新资讯28at.com

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应用程序使用单独的前端作为客户端程序。oeS28资讯网——每日最新资讯28at.com

部分字段说明如下图:oeS28资讯网——每日最新资讯28at.com

图片图片oeS28资讯网——每日最新资讯28at.com

服务端示例

出于说明的目的,我们将在Go中同时编写客户端程序和服务端程序(其实小许是前端小趴菜

本文链接:http://www.28at.com/showinfo-26-37263-0.html慢聊Golang的websocket使用和实现代码分析

声明:本网页内容旨在传播知识,不代表本站观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。

显示全文

上一篇:Python Django:transactions的概念、用法及常见用例

下一篇:玩转Spring MVC自定义请求匹配规则

最新热点