【发布时间】:2014-08-20 15:33:56
【问题描述】:
我有一个 Web 客户端轮询服务器的场景。根据响应中的数据,他们被授予/拒绝访问某些资源。客户端会动态地对这些更改做出反应,并向用户显示资源或某些等待页面(拒绝)。这是通过长轮询机制完成的。如果资源可用,用户可以进行交互,例如回答问题。
我有一个包含这种长轮询机制的测试计划。我最初尝试将轮询添加到请求循环中以根据真实客户端模拟它,但我的请求随后被延迟,直到长轮询请求得到响应。
Thread group
|
|- Get State from server (saves value in variable) - no long polling here
|- Request loop
| |- If Controller (checks the variable)
|- Loop until all resources are processed
|- Get State - long poll **this blocks the user response until the timeout for the server response is met**
|- User response
然后我尝试在单独的循环中运行轮询。然而,当执行轮询循环时,请求循环似乎不再进入。我用调试采样器检查了变量确实被轮询循环改变了,只要服务器上发生了一些变化。
Thread group
|
|- Get State from server (saves value in variable) - no long polling here
|- Request loop
| |- If Controller (checks the variable)
| |- Loop until all resources are processed
| |- User response
|
|- Long-polling loop
| |- Set variable
是否有几乎可以映射真实场景的解决方案?
【问题讨论】:
-
你能提供2个你试过的模式吗?我对你的问题有点困惑,试着让它更清楚一点,谢谢
-
我编辑了我的帖子,让它包含更多细节,我还改写了大部分内容。希望现在更清楚了。模式现在更加详细,但并未显示所有细节。我尽量保持简单;-)
-
这里的 Ajax 长轮询中描述的长轮询:stackoverflow.com/questions/11077857/… Get State 你想发生什么?
-
我不确定它是否是 AJAX 长轮询,但我认为是这样。与您链接中的示例相比,我们实现的唯一区别是,即使没有数据更改,我们的服务器也总是在特定超时后响应。在最好的情况下,Get State 应该与其他请求并行发生,并且在轮询时不会干扰它们。它基本上充当关闭或打开的门,以便客户端知道特定资源可用或关闭。
-
没人知道怎么做吗? :(
标签: jmeter long-polling