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