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

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

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

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

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

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

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

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

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

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

简单使用

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

go get github.com/gorilla/websocket

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

Upgrader

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

Conn

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

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

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

服务端示例

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

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

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

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

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

标签:
  • 热门焦点
  • iPhone卖不动了!苹果股价创年内最大日跌幅:市值一夜蒸发万亿元

    8月5日消息,今天凌晨美股三大指数高开低走集体收跌,道指跌0.41%;纳指跌0.36%;标普500指数跌0.52%。热门科技股也都变化极大,其中苹果报181.99美元,跌4.8%,创
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top