异步聊天

chu*_*eno 5 php mysql ajax

我正在关注PHP-MySQL shoutbox教程,该教程仅涉及在数据库中发送和存储消息.完成之后,我暂时选择每隔5秒刷新一次消息列表,或者每次使用AJAX发送新消息时刷新消息列表.但在实际应用中,这将是效率太低且服务器消耗(实际上是低强度DDOS).那么如何在必要时刷新新邮件列表?更准确地说,如何在发生这种情况时通知我发送了新消息,以便我可以显示它?

Ben*_*min 6

您的问题的解决方案称为长轮询,您将在此SO问题中找到更多信息.

我们的想法是使用当前的AJAX加载信息,但如果没有任何内容可以返回,服务器将不会立即返回响应.相反,它只会在返回空响应之前保持连接打开预定义的秒数,或者在消息可用时立即返回.最大响应时间应足够长,以使其值得,但不要太长,以免在客户端冒超时 - 大约20秒左右应该没问题.

虽然此解决方案允许您减少对服务器的HTTP调用次数,但它只是改变了问题:PHP脚本在等待消息可用时仍需要轮询数据库.如果你期望中等流量,你会没事的.但是如果你想要能够认真地扩展,你将不得不寻找另一种解决方案.

最好的解决方案是使用适当的消息队列而不是数据库,例如Amazon SQSIronMQ.

这些将无限制地扩展,并将提供诸如长轮询之类的功能(不确定IronMQ,但SQS肯定会这样做).