首页 > 其他分享 >Golang压测ws

Golang压测ws

时间:2023-12-25 10:56:08浏览次数:30  
标签:log err messageCount 压测 Golang ws concurrency time message

package main

import (
	"fmt"
	"log"
	"sync"
	"time"

	"github.com/gorilla/websocket"
)

func main() {
	// 设置要压测的WebSocket服务地址
	url := "ws://192.168.252.128:8080/"

	// 设置并发请求数量
	concurrency := 100

	// 设置每个连接的发送消息数量
	messageCount := 10

	// 等待组,用于等待所有goroutine完成
	var wg sync.WaitGroup

	// 开始时间
	startTime := time.Now()

	// 根据并发请求数量启动goroutine
	for i := 0; i < concurrency; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()

			// 建立连接
			conn, _, err := websocket.DefaultDialer.Dial(url, nil)
			if err != nil {
				log.Fatal("无法建立WebSocket连接:", err)
			}
			defer conn.Close()

			// 发送指定数量的消息
			for j := 0; j < messageCount; j++ {
				message := fmt.Sprintf("这是第 %d 个消息", j)
				err = conn.WriteMessage(websocket.TextMessage, []byte(message))
				if err != nil {
					log.Println("发送消息失败:", err)
					return
				}
				log.Println("发送消息:", message)

				// 在发送每个消息之后,可以在这里等待一段时间以模拟实际场景的负载
				//time.Sleep(time.Second)
			}

			// 读取服务器响应
			_, message, err := conn.ReadMessage()
			if err != nil {
				log.Println("读取服务器响应失败:", err)
				return
			}
			log.Println("服务器响应:", string(message))
		}()
	}

	// 等待所有goroutine完成
	wg.Wait()

	// 计算执行时间
	executionTime := time.Since(startTime)

	// 打印统计信息
	log.Printf("压测完成,共发送 %d 个消息,每个连接 %d 个消息\n", concurrency*messageCount, messageCount)
	log.Printf("总执行时间: %.2f 秒\n", executionTime.Seconds())
	log.Printf("每秒请求数: %.2f\n", float64(concurrency*messageCount)/executionTime.Seconds())
}

标签:log,err,messageCount,压测,Golang,ws,concurrency,time,message
From: https://www.cnblogs.com/qcy-blog/p/17925669.html

相关文章

  • 2023-12-25 无法正常关闭你的电脑 错误代码:0xc0000001 ==》试一下用windows命令【sfc
    最近我的电脑每次早上开机的时候就开始蓝屏,哪怕我晚上把它设置为睡眠模式,第二天打开还是不断蓝屏,对,不是一次,而是起码七八次!我的解决方案就是用命令去修复了一下,其实我在写这个随笔的时候我也不知道明天是否能够正常开机。先说导致蓝屏的代码:0xc0000001这个代码不一定能正确代表......
  • golang 的github.com/sony/sonyflake IP问题bug
    使用容器部署golang项目时,饮用了github.com/sony/sonyflake生成snowid,初始化时不传入任何参数:SnowId=sonyflake.NewSonyflake(sonyflake.Settings{})在容器的ip设置设置为类似:192.18.10.8时,调用生成id存在空指针报错。snowId,err:=global_conf.SnowId.NextID()处理......
  • Windows电脑上的多开器与分布式存储系统的关系
    当今,随着信息技术的不断发展,人们对于计算机性能和存储需求的要求也越来越高。在Windows电脑上,多开器与分布式存储系统之间存在着密切的关系,二者共同构建了一个高效、可靠的计算环境。首先,让我们来了解一下多开器的概念。多开器是一种软件工具,可以让用户在单台计算机上同时启动多......
  • Golang 常用工具记录
    Golang常用工具记录1golang类1.1日常使用的copier复制结构体到另外一个结构体等等类似的功能asynqGo中简单、可靠、高效的分布式任务队列,使用redis做为brokermachineryMachinery是基于分布式消息传递的异步任务队列/作业队列。restyresty是Go语言的一个H......
  • 5.10 Windows驱动开发:摘除InlineHook内核钩子
    在笔者上一篇文章《内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一个非常明......
  • WSL的导出与导入
    1需求现在我需要把我在平板上配好的系统导出来,再放到我的笔记本上。2基本情况笔记本电脑没装过wsl平板上配好了wsl,并且里面的ubuntu配好了python环境。3从平板导出比较顺利先关机。wsl--shutdown这里后两个我用不到,因为没有桌面的图形界面,导出提示为空。 wsl--exportUbuntu-20.......
  • TiDB在银行业核心系统POC测试应用压测参考手册
    背景在信创和国产化的背景下,政企银行国企等会在不久的将来全面实现国产化。就银行业底层使用的数据库而言,会逐步从小oracle小机、DB2大机等国外产品逐步替换为使用国产数据库,从边缘系统开始替换积累使用经验,后逐渐全面覆盖到核心系统。在核心系统迁移到国产数据库前,需要做很多测试......
  • windows 安装 ubuntu 教程
    下载VMware下载链接:https://customerconnect.vmware.com/en/downloads/details?downloadGroup=WKST-PLAYER-1625&productId=1039&rPId=51984下载完成,安装即可下载Ubuntuhttps://ubuntu.com/download/desktop开始创建虚拟机点击创建虚拟机选择稍后安装选项LinuxUbuntu64位选择安......
  • 将windows上socket的client程序修改到linux上运行
    将windows上客户端程序修改到linux上运行记录一下修改哪些地方编译命令文件夹的内容:包含了client.cppmySocket.cppmySocket.huntil.h链接在一起g++-cclient.cppmySocket.cppuntil.h-std=c++11-pthread使用g++编译器将client.cpp、mySocket.cpp和until.h......
  • windows通过 桥接Usb 电缆连接linux 主机并通信的方法
    在Windows上通过USB转串口线连接Linux主机并进行通信,可以参考以下步骤:首先,插入USB转串口线到电脑的USB接口,此时系统会自动识别设备并安装驱动。检查设备管理器的端口(COM和LPT)中是否出现相应的串口信息。启动USB/IP项目以启用常见的开发人员USB场景,例如访问智能卡读取器等。确保你的......