当前位置:首页 > 科技  > 软件

慢聊Golang的websocket使用和实现代码分析

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

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

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

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

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

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

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

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

简单使用

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

go get github.com/gorilla/websocket

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

Upgrader

Upgrader指定用于将 HTTP 连接升级到 WebSocket 连接MR628资讯网——每日最新资讯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来解决跨域问题MR628资讯网——每日最新资讯28at.com

Conn

Conn类型表示WebSocket连接,这个结构体的组成包括两部分,写入字段(Write fields)和 读取字段(Read fields)MR628资讯网——每日最新资讯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应用程序使用单独的前端作为客户端程序。MR628资讯网——每日最新资讯28at.com

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

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

服务端示例

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

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

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

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

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 中关村论坛11月25日开幕,15位诺奖级大咖将发表演讲

    11月18日,记者从2022中关村论坛新闻发布会上获悉,中关村论坛将于11月25至30日在京举行。本届中关村论坛由科学技术部、国家发展改革委、工业和信息化部、国务
Top