Symfony 2:如何处理大任务用户友好



我实现了一个时事通讯功能。

用户可以从他的客户中选择一个列表,他想向其发送时事通讯,客户列表可能有几千个条目。

在用户完成创建列表后,我将创建一个数据库,其中包含我需要的列表中的所有信息。现在,我想让这个过程尽可能对用户友好。

我想了一下:

  1. 用户完成列表并单击"保存"
  2. 我获取信息并返回类似"操作正在运行。请稍候,此操作可能需要几分钟"的视图
  3. 我正在将列表中的信息写入数据库
  4. 我将用户从"请稍候"视图重定向到另一个视图,在那里他可以再次工作

我的问题是,我不知道如何在symfony2中实现这一点,事件是否有可能,或者我应该在会话中保存列表?

您有几个选项。最常见的两种是:

  • 使用javascript的AJAX调用
  • 使用队列(如ZeroMQ或RabbitMQ)

我更喜欢排队,因为它更易于管理。在Symfony2中,有几个包可用于实现队列系统:

  • RabbitMQ捆绑包:https://packagist.org/packages/oldsound/rabbitmq-bundle
  • ZeroMQ库:https://github.com/reactphp/zmq

您可以在上搜索备选方案https://packagist.org

我将实现以下流程:

  1. 渲染窗体
  2. 张贴表单
  3. 处理表单:将信息保存到数据库
  4. 句柄形式:对应队列发送
  5. 用闪光灯通知用户

在后端:

  1. 启动使用者(CLI)
  2. 从队列中获取信息
  3. 发送您的时事通讯
  4. 使用新状态和日志更新数据库

在前端:如果数据库已更新并且状态已更改,则通知用户

最新更新