Playframework 游戏框架中的进度指标

Playframework 游戏框架中的进度指标,playframework,progress-bar,Playframework,Progress Bar,实施某种进展指标的最佳方式是什么 我有一个简单的导入页面,用户可以上传csv文件。然后,服务器将进行一些长时间的处理,直到导入完成。上传后,我想将用户重定向到一个单独的页面,并在“导入的856个数据集中的150个”页面上给他一些持续的反馈 上载操作触发一个控制器方法,该方法可以在自己的线程中启动耗时的任务,但是如何通过另一个页面的ajax调用获取作业的状态(因为play在请求之间没有任何类型的状态)?您可以做的一件事是使用一些集中的通知。您可以为导入提供一些唯一标识符,并使用此id编写更新消息。

实施某种进展指标的最佳方式是什么

我有一个简单的导入页面,用户可以上传csv文件。然后,服务器将进行一些长时间的处理,直到导入完成。上传后,我想将用户重定向到一个单独的页面,并在“导入的856个数据集中的150个”页面上给他一些持续的反馈


上载操作触发一个控制器方法,该方法可以在自己的线程中启动耗时的任务,但是如何通过另一个页面的ajax调用获取作业的状态(因为play在请求之间没有任何类型的状态)?

您可以做的一件事是使用一些集中的通知。您可以为导入提供一些唯一标识符,并使用此id编写更新消息。然后,要检索状态,只需使用该密钥


另一种选择是使用web套接字,基本上将通知推送回客户端(尽管它们还没有得到广泛支持)。

您可能要做的是从控制器创建作业。事实上,如果您阅读了Play文档,我们会明确鼓励您在作业中执行长时间运行的处理,以便它们不会占用HTTP请求线程

因此,通过处理CSV文件,您的作业正在运行。下一步是记录处理每个数据集的时间。因此,假设您向作业传递了一个引用,如uid或某个唯一的数字,并将其传递回客户机。然后,您只需记录(如果您希望符合无状态状态并易于扩展,则可能在数据库中记录)根据您的唯一id处理的数据集数量的每个增量

比如说

@Entity
public class DatasetProgress extends Model {

    public Long uid;
    public Long datasetsDone;
    public Long datasetsTotal;

}

然后,您可以创建一个控制器操作,该操作基于uid返回DatasetProgress对象,您可以使用它来显示进度条。

我会使用answers John和@Codemwnci来完成此任务,特别是如果您确定将使用支持WebSocket或至少Comet的浏览器。在这种情况下,您可以构建真正的live-like进度条。