SpringBoot WebSocket Jmeter压力测试 踩坑记录之URL

server/2024/10/11 6:40:15/

先说结论,使用Jmeter压测的时候一定要在URL上区分出哪些是sessionId ,否则可能会出现会话重复的情况。 以下是具体内容:



 

以下面的 WebSocket URL 为例:

```
ws://127.0.0.1:8005/market-ws/110/uyux3kws/websocket
```

这个 URL 可以分解为多个部分,每个部分在建立和管理 WebSocket 连接时都有特定的作用。以下是对 `market-ws` 后面路径参数的详细解释:

1. **`market-ws`**:这是 WebSocket 服务的基本端点或前缀,通常与市场数据相关。它表示在此路径下的所有连接都是用于市场相关的 WebSocket 通信。

2. **`110`**:这个部分通常代表 **服务器 ID** 或 **分片 ID**。在处理实时数据(如市场行情)的分布式系统中,服务器可能被划分为多个分片或实例,以实现负载均衡和容错。数字 `110` 可能标识处理此连接的特定服务器或分片。

3. **`uyux3kws`**:这通常是一个 **会话 ID** 或 **唯一的客户端标识符**。当客户端发起 WebSocket 连接时,服务器可能会分配一个唯一的会话 ID,用于跟踪会话状态、管理消息以及在需要时方便地重新连接。这个 ID 确保消息在客户端和服务器之间正确路由,并有助于维护会话的连续性。

4. **`websocket`**:这个部分指定了正在使用的 **传输协议**。在本例中,它明确指出传输协议是 `websocket`。这在可能支持多种传输方式的环境中特别重要(例如,如果无法建立 WebSocket 连接,可以使用 HTTP 长轮询、服务器发送事件等作为备用),因为它可以提供其他的传输机制。

**背景解释:**

您的 URL 结构与 **SockJS** 使用的 URL 模式非常相似。SockJS 是一个 JavaScript 库,它模拟了 WebSocket API,但为浏览器或网络不支持 WebSocket 的情况提供了额外的备用方案。SockJS 的 URL 通常遵循以下模式:

```
/[endpoint]/[server-id]/[session-id]/[transport]
```

- **Endpoint(端点)**:WebSocket 或 SockJS 服务的基本路径(在您的情况中为 `market-ws`)。
- **Server-ID(服务器 ID)**:标识处理该连接的服务器或实例(`110`)。
- **Session-ID(会话 ID)**:客户端会话的唯一标识符(`uyux3kws`)。
- **Transport(传输方式)**:使用的传输机制(`websocket`)。

通过这种方式构建 URL,类似 SockJS 的框架可以有效地管理连接,处理负载均衡,并提供无缝的备用机制。

**总结:**

- **`market-ws`**:用于市场数据的 WebSocket 服务端点。
- **`110`**:处理该连接的服务器或分片的标识符。
- **`uyux3kws`**:客户端连接的唯一会话 ID。
- **`websocket`**:指定使用的传输协议为 WebSocket。

这种 URL 结构允许服务器有效地管理多个客户端和服务器,确保客户端与 WebSocket 服务之间的通信可靠且有序。


http://www.ppmy.cn/server/130006.html

相关文章

「实战应用」如何用图表控件LightningChart可视化天气数据?(一)

LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学…

Golang | Leetcode Golang题解之第472题连接词

题目: 题解: type trie struct {children [26]*trieisEnd bool }func (root *trie) insert(word string) {node : rootfor _, ch : range word {ch - aif node.children[ch] nil {node.children[ch] &trie{}}node node.children[ch]}node.isE…

【go入门】流程控制语句

目录 前言if else基本写法特殊写法 for(循环结构)for 基本写法不写初始语句,但分号必须要加不写初始语句和结束语句无限循环(死循环)break和continue for range(键值循环)switch和casegoto&…

Airtest脚本的重构与优化:提升测试效率和可读性

在自动化测试的工作里,编写高效且易于维护的测试脚本是一项挑战,尤其是在应对复杂的测试场景时。Airtest作为一款常用的自动化测试工具,它提供了丰富的API和灵活的脚本编写方式,帮助测试人员高效地开展UI自动化测试。然而&#xf…

走进异常类的世界,自定义业务异常类实现指南

接下来这篇文章,小编将带领大家走进异常类的世界,探索异常类的奥秘。 引言 学习Java异常类,需掌握其基础概念,如try-catch语句、throw与throws关键字。通过实例理解异常层次结构,区分已检查与未检查异常。实践编写自定…

Redis中大key优化落地实战

背景 最近Redis服务器总是报警,这块对Redis中的数据做了一次治理,分享一下治理的思路。 思路 首先需要看一下Redis库的比较大的KV是啥,发现大部分都是缓存的JSON。如下面所示 {"id": 1,"name": "张三",&qu…

GRU--详解

GRU(Gated Recurrent Unit)(门控循环单元)是RNN(循环神经网络)的一种变体。GRU的设计简化了另一种RNN变体——LSTM(长短期记忆网络),与LSTM不同的是,GRU将输入…

鸿蒙开发(NEXT/API 12)【HTTP数据请求】网络篇

场景介绍 应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 接口名描述createHttp()创建一个http请求…