问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

gorilla/websocket使用教程

发布网友 发布时间:2022-11-19 23:17

我来回答

1个回答

热心网友 时间:2023-10-08 19:43

最近打算为我的网站添加一个服务器资源监视功能,需要服务端主动向前端推动资源占用数据。这时Http则不能达到要求。所以自然想到采用websocket。以前使用SpringBoot时使用websocket很简单,只需要将ServerEndpointExporter注入到bean容器并配合相应注解即可创建一个websocket服务。这里要感谢各位前辈的封装让我们能尽快实现相应的功能,但本次出于学习目并不是公司项目(效率&稳定性至上)同时使用的开发语言为Golang,其web开发生态也不会像Java那样丰富,最后选择了开源实现 gorilla/websocket 项目地址

执行 go get github.com/gorilla/websocket 添加依赖

我们知道websocket由http升级而来,首先会发送附带Upgrade请求头的Http请求,所以我们需要在处理Http请求时拦截请求并判断其是否为websocket升级请求,如果是则调用 gorilla/websocket 库相应函数处理升级请求。

首相要创建Upgrader实例,该实例用于升级请求

其中 CheckOringin 是一个函数,该函数用于拦截或放行跨域请求。函数返回值为 bool 类型,即 true 放行, false 拦截。如果请求不是跨域请求可以不赋值,我这里是跨域请求并且为了方便直接返回 true

此时已经成功升级为websocket连接并获得一个conn实例,之后的发送接收操作皆有conn完成其类型为websocket.Conn。

首先向客户端发送消息使用 WriteMessage(messageType int, data []byte) ,参数1为消息类型,参数2消息内容
示例:

接受客户端消息使用 ReadMessage() 该操作会阻塞线程所以建议运行在其他协程上。该函数有三个返回值分别是,接收消息类型、接收消息内容、发生的错误当然正常执行时错误为 nil。一旦连接关闭返回值类型为-1可用来终止读操作。
示例:

同时可以为连接设置关闭连接监听,函数为 SetCloseHandler(h func(code int, text string) error) 函数接收一个函数为参数,参数为nil时有一个默认实现,其源码为:

可以看到作为参数的函数的参数为int和string类型正好和前端的close(long string)对应即前端调用close(long string)关闭连接后两个参数会被发送给后端并最终被 func(code int, text string) error 所使用。
示例:

则断开连接时将打印code和text

注意:要想使断连处理生效必须要有 ReadMessage() 操作否则不会触发断连处理操作。
以上是常用基础操作点击 官方API手册 学习更多。

最后:大幻梦森罗万象狂气断罪眼\ (••) /
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
妄想山海如何捕捉异兽 妄想山海异兽捕捉攻略 妄想山海 新手抓捕宠物攻略 妄想山海宠物怎么养成 宠物养成攻略 儿童打止痛针的副作用有多大? 本人学生党一个,不知道要入手ps4还是xboxone? 封门村黑天真的有鬼吗,当初是谁把封门村建处在山上住,我说的是当初封门... 梦见王纯雪的预兆 如何做海报封面如何做海报封面模板 如何做海报封面 qq空间点赞排序原则 后端使用springboot+tio-http-server,前端使用element-ui+websocket,如何解决跨域问题?后端已支持跨域 SpringBoot+WebSocket问题:Failed to register @ServerEndpoint class SpringBoot配置WebSocket 20微米的片状银粉和10微米片状银粉哪个导电性能好 银粉导电吗 导电银粉能沉入水底 上海乘地铁划算还是公交划算 亲们在北京做地铁便宜 还是公交便宜??? 同样距离的路程,乘地铁便宜还是乘公交车便宜? 坐地铁实惠还是做公交实惠 正博士充电器60V,20AH多少钱 90平米的新房水电装修大概多少钱 怎样做好吃的雪条? 95254634是什么电话? 肇庆市端州区信安大道肇泉装饰材料城的邮编是? 蜜雪冰城柠檬水成本 想知道: 肇庆市 26公交线路的信息 肇庆市汽车站坐几号公交车到肇庆肇泉装饰材料城 钢之炼金术师剧场版 叹息之丘的圣星 画风... 花名未闻最后一集最后一个镜头面麻的简笔画上面写得什么啊、 测试包的用法 那里载病毒测试包最好?打开会不会中毒? “邮政绿卡:储蓄卡”和“淘宝卡”有什么区别?各有什么用途? 中国邮政储蓄绿卡与邮政淘宝绿卡有什么区别 3到6岁儿童的注意主要是以什么占优势的 急.邮政储蓄银行的绿卡和淘宝卡有什么不同点和相同点 3~6岁儿童注意发展的特征中正确的是 邮政储蓄银行的绿卡 (淘宝联名卡)的账户和原来邮政储蓄银行卡的账户一样吗,不一样的话可以互相查询吗? 2019年迎元旦给老同学祝福短信 河北信服科技是真的吗 大唐信服科技有限公司电话是多少? 西安大唐信服工作靠谱吗 河北研究生考试成绩查询怎么老提示验证码错误啊 成都大唐信服工作靠谱吗 个人征信查询身份验证码是对的输入之后提示验证码错误是怎么回事? 谁知道PPT中的声音去哪里下载? 浙江和达海运股份有限公司怎么样 手机视频怎么加速啊,就是x4x6什么的, 杭州专科初级运维人员工资 杭州运维前哨网络科技有限公司工资如何?杭州工资水平怎么样?