玩WebSocket客户端负载测试另一个播放websocket服务器应用程序

时间:2014-03-08 19:21:28

标签: scala playframework websocket scalatest

我们有一个现有的播放服务器应用程序,移动客户端通过Web套接字(双向通信)与之交谈。现在作为负载测试的一部分,我们需要模拟数百个客户端对服务器的请求。

我正在考虑编写一个单独的播放客户端(无面部)应用程序,并以某种方式循环向服务器应用程序发出100个请求?鉴于我是网络套接字的新手,这种方法听起来合理吗?

另外,编写一个向Web套接字服务器发出Web套接字请求的匿名Web套接字客户端的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

如果要正确验证应用程序的性能,则非常重要: 通过模拟真实的" websocket"来模拟真实用户的行为。连接   - 使用websocket频道在应用程序上重现逼真的最终用户旅程  生成适当的用户工作流程(用户在接收websocket消息时执行的操作)非常重要。例如,在投注应用程序中,用户根据浏览器接收的消息与应用程序交互。

为了能够生成逼真的负载测试,我建议使用支持Websocket的真实负载测试软件。它将允许您生成不同类型的用户,具有不同类型的网络,不同类型的浏览器....等 您的应用程序使用的框架是什么?根据框架,我可以为您推荐合适的工具。

答案 1 :(得分:0)

您必须在数百个客户端和来自同一客户端的数百个请求之间做出改变 如果您有数百个客户,请求可以同时进入 当您只有一个客户端时,请求主要来自顺序(取决于使用一个或多个线程)。

当您只有一个客户端时,您可以使用循环完美地发送请求。您将在此处实际测量的是服务器的处理延迟。

当您想模拟多个客户端时,这有点困难。如果您从一台计算机上模拟它们,请求将通过网卡流水线化,因此请求并非真正并行发送。此外,您受到机器带宽的限制。假设服务器具有1Gb连接并且您的测试机器具有1Gb连接,那么您永远不会过载服务器的带宽。如果您的客户端应该具有50Mb的有限带宽,那么您可以运行20个客户端(不考虑通过网卡发生的序列化)。
理论上,您应该使用与要测试的客户端数量一样多的计算机。实际上,您将使用多台运行有限数量客户端的计算机。

关于无头测试应用程序,您可以使用像PhantomJS这样的无头浏览器测试框架。

答案 2 :(得分:0)

我已经使用Node.js编写了一个简单的Websocket客户端。 如果服务器处于打开状态并准备接受请求,则可以按照以下说明触发请求,

const WebSocket = require('ws')

 const url = ws://localhost:9000/ws
 const connection = new WebSocket(url)

 connection.onopen = () => {
    for (var i=0;i<100;i++) {
        connection.send('hello')
    }
 }

 connection.onmessage = (event) => {
    console.log(event.data)
 }

 connection.onerror = (error) => {
    console.log(`WebSocket error: ${error}`)
 }