Go WebSocket开发与测试实践【gorilla/websocket】
文章引用
Golang 官方标准库实现的 websocket 在功能上有些欠缺,本次介绍的 gorilla/websocket库,是Gorilla出品的速度快、质量高,并且被广泛使用的 websocket 库,很好的弥补了标准库功能上的欠缺。
依赖
github.com/gorilla/websocket v1.4.2
WebSocket开发
跟Go官方标准库实现有一点较大区别就是需要Upgrader对象,用来处理将HTTP请求升级为WebSocket请求,创建比较简单,下面是Demo:
var upgrader = websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024,HandshakeTimeout: 5 * time.Second,}
下面是创建WebSocket服务的代码:
// TestWEBs 创建一个WebSocket服务
// @Description:
// @param t
func TestWEBs(t *testing.T) {var upgrader = websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024,HandshakeTimeout: 5 * time.Second,}http.HandleFunc("/websocket", func(w http.ResponseWriter, r *http.Request) {conn, _ := upgrader.Upgrade(w, r, nil) for {msgType, msg, err := conn.ReadMessage()if err != nil {return}fmt.Printf("%s receive: %s\n", conn.RemoteAddr(), string(msg))if err = conn.WriteMessage(msgType, msg); err != nil {return}}})http.ListenAndServe(":12345", nil)
}
客户端
本次依然使用Java和Go两种客户端代码,Java版本与之前大同小异。
package com.funtest.javatest;import com.funtester.frame.SourceCode;
import com.funtester.socket.WebSocketFunClient;public class WebSocketT extends SourceCode {public static void main(String[] args) {WebSocketFunClient instance = WebSocketFunClient.getInstance("ws://localhost:1234/websocket");instance.connect();instance.send("你好,我是FunTester - Java ,Have Fun ~ Tester !");}}
下面是Go版本的客户端
// TestWebSocket
// @Description: 测试WebSocket脚本
// @param t
func TestWebSocket(t *testing.T) {url := "ws://localhost:1234/websocket"c, res, err := websocket.DefaultDialer.Dial(url, nil)if err != nil {log.Fatal("连接失败:", err)}log.Printf("响应:%s", fmt.Sprint(res))defer c.Close()done := make(chan struct{})err = c.WriteMessage(websocket.TextMessage, []byte("你好,我是FunTester"))if err != nil {fmt.Println(err)}for {_, message, err := c.ReadMessage()if err != nil {log.Fatal(err)break}log.Printf("收到消息: %s", message)}<-done
}
测试
老规矩先启动服务端,后启动客户端。
服务端日志:
=== RUN TestWEBs
[::1]:59843 sent: 你好,我是FunTester
127.0.0.1:59902 receive: 你好,我是FunTester - Java ,Have Fun ~ Tester !
Go客户端日志:
=== RUN TestWebSocket
2021/11/15 11:47:26 响应:&{101 Switching Protocols 101 HTTP/1.1 1 1 map[Connection:[Upgrade] Sec-Websocket-Accept:[5PGBd7voA/Wg2LVYY647eVMXRZc=] Upgrade:[websocket]] {0xc0003c6600} 0 [] false false map[] 0xc000474100 <nil>}
2021/11/15 11:47:26 收到消息: 你好,我是FunTester
Java客户端日志:
INFO-> main 当前用户:oker,工作目录:/Users/oker/IdeaProjects/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16
INFO-> main FunTester_0 开始连接...
INFO-> WebSocketConnectReadThread-14 FunTester_0 正在建立socket连接...
INFO-> WebSocketConnectReadThread-14 握手信息key: Connection ,value: Upgrade
INFO-> WebSocketConnectReadThread-14 握手信息key: Sec-WebSocket-Accept ,value: qMHB4r/HCWEGF2o/jgY7KDvPyS0=
INFO-> WebSocketConnectReadThread-14 握手信息key: Upgrade ,value: websocket
INFO-> main FunTester_0 连接成功!
INFO-> WebSocketConnectReadThread-14 FunTester_0收到: 你好,我是FunTester - Java ,Have Fun ~ Tester !
PS:Go语言在WebSocket测试中比Java强太多,以后WebSocket的功能或者性能测试,我应该会更倾向于用Go实现。前两天做了测试,Go语言几分钟内就能启动3万链接,而Java,支撑不到这么多。
下面是一份配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
这些都可以以在公众号:伤心的辣条 ! 免费领取,还有一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
面试经:一线城市搬砖!又面软件测试岗,5000就知足了…
面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…
什么样的人适合从事软件测试工作?
那个准点下班的人,比我先升职了…
测试岗反复跳槽,跳着跳着就跳没了…
Go WebSocket开发与测试实践【gorilla/websocket】相关推荐
- golang gorilla websocket例子
WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. WebSocket通信协议于2011年被IETF定 ...
- websocket python爬虫_python实现基于websocket协议的网络爬虫
WebSocket是一种在单个TCP连接上进行全双工通信的协议,简单来说就是建立一个TCP长连接之后,你可以服务器随时可以给客户端发送消息,客户端随时可以给服务器发送消息,而以前只能是客户端给服务器发 ...
- c++ websocket客户端_python测试开发django81.dwebsocket实现websocket
前言 HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息. WebSocket 协议它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是 ...
- gorilla websocket简易介绍
以下内容转载自 https://studygolang.com/articles/30074 前言 最近打算为我的网站添加一个服务器资源监视功能,需要服务端主动向前端推动资源占用数据.这时Http则不 ...
- go gorilla_使用gorilla websocket构建浏览器推送通知服务的低级设计
go gorilla Singhania AdityaSinghania Aditya Follow跟随 Aug 31 8月31 gopher leaving everyone awestruck w ...
- 《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 1.4 内容安排
本节书摘来异步社区<Web异步与实时交互--iframe AJAX WebSocket开发实战>一书中的第1章,第1.4节,作者: 赵振 , 王顺 , 于梦竹 , 李泽 , 侯法超 , 刘 ...
- EMQ踩坑之路-搭建/测试/nginx配置websocket的ws及wss/web页面测试连通性、微信小程序使用wss--MQTT推送
最近公司要做推送平台,我接手做这个任务.在使用过程中遇到一些坑,这里分享给大家. 一.MQTT协议介绍 推送平台一般是基于轻量级的mqtt协议搭建的.mqtt协议是物联网领域常用的,是实现长链接的一种 ...
- Python用tornado的websocket开发聊天室
Python用tornado的websocket开发聊天室 用tornado开发基于异步websocket聊天室-demo 目录结构 Python包 main.py app/views.py temp ...
- 【Web安全】先进技术WebSocket下安全测试
什么是WebSocket WebSockets 是一种先进的技术.它可以在用户的浏览器和服务器之间打开交互式通信会话.允许浏览器和服务器建立单个TCP连接然后进行全双工异步通信.允许实时更新,浏览器也 ...
最新文章
- 多线程:一个线程在运行时发生异常会怎么样?
- 面试python开发_python开发面试问题
- Swift之缓存文件处理
- android 使用Photoshop获取图片某一点的颜色
- 日常(关于游泳之列的真理问题讨论)
- 基于JAVA+SpringMVC+Mybatis+MYSQL的音乐播放系统
- 蚂蚁回应渠道之争;微软更新致大规模服务中断;OpenSSH 8.4 发布|极客头条
- POJ NOI0105-32 求分数序列和
- python time用法
- sonar-runner命令模式运行sonar
- 电脑桌面跳出框计算机内存不足,电脑提示虚拟内存不足怎么办 电脑提示虚拟内存不足的原因分析和解决方法...
- gaot工具箱介绍及应用
- matlab的转置和共轭,对Matlab中共轭、转置和共轭装置的区别说明
- oracle 英文 简历,简历表英文模板
- 4针串口线接法图_RS232串口线接口及接法(串口通信RS232的基本接法)
- linux WPA_supplicant
- 平衡树--替罪羊树 *
- 宏观经济笔记--社会消费品零售总额
- 软件著作权转让的收费标准怎样
- JavaSE语法(3)——【逻辑控制:各种分支循环语句】
热门文章
- 5-1 duck typing的概念
- pb 如何判断数据窗口中是否有某个字段_怎么判断数据窗口中某个字段存在重复的数据...
- 数据结构与算法之-----二叉树(一)
- 备份文件到本地服务器失败,已解决: 备份index/boostrap ,备份filesystem 失败 - Dell Community...
- oracle 对表重建索引,重建特定Oracle表的所有常规索引
- mysql主从复制读写分离_MySQL主从复制与读写分离的工作原理
- Qt使用MSVC编译器关闭“warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”警告的方法
- VC中海量文件读写类设计与应用
- 产品研发过程管理专题——产品需求分析原则二
- python动态类型的坑_在Python中避免动态类型错误的策略是什么(NoneType没有属性x)?...