我正在使用长轮询开发 Play 1.2.4 应用程序,类似于聊天示例。我一直在使用 JMeter 进行负载测试,当我有 300 多个侦听器时,我的服务器需要超过 4 秒的时间来回答,这对我的需求来说太多了,或者侦听器永远不会收到答案。我需要在不到一秒的时间内得到所有回复。
长轮询是否有连接限制?我需要特殊的配置或服务器吗?
提前致谢,
我正在使用长轮询开发 Play 1.2.4 应用程序,类似于聊天示例。我一直在使用 JMeter 进行负载测试,当我有 300 多个侦听器时,我的服务器需要超过 4 秒的时间来回答,这对我的需求来说太多了,或者侦听器永远不会收到答案。我需要在不到一秒的时间内得到所有回复。
长轮询是否有连接限制?我需要特殊的配置或服务器吗?
提前致谢,
听起来您在 Play 服务器上没有达到长轮询的连接限制。相反,您可能会遇到某种形式的瓶颈,这会导致响应时间降低。
一个很大的可能性是您在执行 JMeter 测试的机器上达到了限制,如果您在 GUI 模式下运行,这种可能性会增加。您可以通过使用多台机器重复测试来验证是否是这种情况,只需在两台机器上同时执行相同的测试,如果它们都显示与仅运行一个测试时相同的结果,那么逻辑上问题是不是您的 Play 服务器,而是测试本身。但是,如果您在运行两个测试时看到更糟糕的结果,那么问题出在您的服务器上。请记住使用加速时间,这将有助于确定事情开始减速的点,这对调整很有用。
如果您达到 JMeter 限制,请尝试从命令行运行,这会更有效,或者,如果您真的想要界面,请尝试使用更少的侦听器,这些都是导致问题的原因。
不需要特殊配置,这只是服务器上的 CPU/RAM 加上处理控制器调用需要多长时间(对 DB 的请求数等)的问题。
由于 Play 是无状态的,如果您遇到超时,只需尝试在负载均衡器后面添加第二台服务器,这应该可以解决问题。
编辑评论:
您遇到的主要问题是 Play 需要很长时间才能将事件传播给 300 个用户。这是意料之中的,因为 Chat 示例使用内存系统进行传播,将消息按顺序传递给每个订阅者。
Chat 方法还有另一种方法:如果您要使用第二台服务器,则消息不会在它们之间共享,因为 ArchivedEventStream 本地存储在 Play 实例 JVM 中。
如果您想要更高的性能,您需要将发布/订阅步骤移至外部消息队列工具,例如 Redis。这将有利于让您添加额外的实例,同时在它们之间共享相同的消息。