【发布时间】:2019-01-10 05:56:04
【问题描述】:
我正在尝试对我们的网络应用程序进行负载测试,这是一个使用 asp.net 核心和信号器技术的代码编写的实时游戏应用程序。 我们正在使用 Peter Doornbosch 的 JMeter WebSocket Samplers 进行 websocket 通信。但我们无法从信号服务器获取任何消息(来自 websocket 层的 ping 帧除外)。 我试图阅读的短信是从服务器到所有连接的客户端的广播,所以我可以看到浏览器客户端已收到该消息,但 jmeter 客户端没有收到它。 我已经嗅探到浏览器和 jmeter 客户端的流量,发现 jmeter 客户端根本没有收到服务器消息,而是在浏览器中。 所以我认为我在初始连接建立步骤中缺少一些参数或标头,因此服务器无法检测到 jmeter 客户端,即使当时 websocket 连接已打开并且 websocket 层 ping 已到达 jmeter 客户端。
在 Jmeter 中完成的事情:-
- HTTP 请求到 signalr 的服务器端点并获取 signalr connectionId 作为响应提取它并保存在 jmeter 变量中。
- 使用 Single Write Sampler 使用在步骤 1 中获得的 connectionId 设置新的 websocket 连接,并发送一个文本框来设置 Signalr 数据协议“{“protocol”:“json”}”。(复制到浏览器的开发者控制台中)
- 使用现有连接,另一个 Single Write Sampler 发送文本,调用信号器集线器函数以添加到信号器组。在集线器函数中,有一个广播写入所有连接的客户端。
- 使用单读采样器从步骤 3 中提到的服务器读取广播。此步骤总是导致 jmeter 中的响应超时错误。
任何对 jmeter 和 singnalr 使用 webSocket 作为传输有经验的人都可以解释一下吗? 欢迎任何线索。 在此先感谢
【问题讨论】:
-
是的,我们一直在按照上述教程进行操作,并且我更新了解释我们已完成步骤的问题。谢谢
-
对于写入步骤,我必须在最后发送一个方形字符,当我检查网站在做什么时,我可以在浏览器的开发者控制台中看到这一点。据我了解,它标志着您请求的“结束”。如果没有这个方形字符,它对我不起作用。
-
非常感谢您!!我们在写入中缺少该符号。现在可以在 jmeter 中看到读取。您可以将其作为答案,我会将其标记为解决方案。其他人可能会发现它非常有用。
-
@ChristopherMathew SignalR 协议在github.com/aspnet/AspNetCore/blob/master/src/SignalR/specs/… 处为其编写了一个规范,您缺少的部分是位于 json 编码部分github.com/aspnet/AspNetCore/blob/master/src/SignalR/specs/… 中的记录分隔符@
标签: asp.net-core websocket jmeter signalr jmeter-plugins