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

发布于:2024-10-11 ⋅ 阅读:(7) ⋅ 点赞:(0)

先说结论,使用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 服务之间的通信可靠且有序。