使用PHP的服务器发送事件的最佳方法 - 性能建议

时间:2014-10-16 18:09:33

标签: php mysql optimization server-sent-events

我需要一些关于表现的建议......

我们有一个长期运行的PHP脚本(可能需要超过10分钟),其中进度更新通过服务器发送事件触发回UI。 http://www.html5rocks.com/en/tutorials/eventsource/basics/

它一切正常,但我担心它会破坏数据库。

粗糙的流程是这样的;

  

1)用户转到应用的“发布”页面。

     

2)UI打开一个EventSource流到一个监视是否的PHP脚本   发布正在进行中,如果是,则报告进度事件 - 每次检查   第二

     

3)如果用户启动发布,则会触发对long的Ajax调用   运行php脚本。

     

4)然后,EventSource将报告此发布的事件。

通过在mySQL表中存储进度来完成监视。 长时间运行的脚本将进度写入数据库,事件脚本每秒检查一次。

正如我所说,这一切都有效,除了它每秒钟都会访问数据库以进行查找 - 在发布页面上打开每个页面。

这是一个低用户(目前低于100 - 但这可能会增加),低频率应用程序,因此不太可能同时在该页面上只有一手牌,但仍然 - 它不会需要很多。

目前全部托管在AWS - micro DB上。

所以我想我的问题是。

  

1)每个发布页面会话每秒点击一次数据库 - 就是这个   坏?我应该担心吗?

     

2)点击数据库有哪些替代方法 - 写入文件或内存?   (如果我们负载平衡会很糟糕)

     

3)在mySQL中无法通知PHP事件脚本   表更新有吗?

如果我将它扩展到超过一秒钟,UI进度非常蹩脚(跳过太多信息)。

我可以动态更改更新时间。发布正在进行中的每一秒,当它不是时,下拉到每5或10?

在Node中重写或使用单独的通知服务器实际上不是一个选项 - 我只想为长时间运行的脚本进行简单的进度事件!!

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

  

1)每个发布页面会话每秒点击一次数据库 - 这是不是很糟糕?我应该担心吗?

如果您的用户群增长,这可能会快速终止您的数据库。

  

2)点击数据库有哪些替代方法 - 写入文件或内存? (如果我们负载平衡会很糟糕)

文件最简单。虽然您可能会使用SQLite并将您的主数据库排除在此特定问题的等式之外。

  

3)当mySQL表更新时,无法通知PHP事件脚本吗?

当然,有一种迂回的方式。让事件脚本监听对MySQL数据库更新时写入的缓存文件的更改。