我基于Flash的聊天客户端不够强大?还有什么其他方式?

问题描述 投票:0回答:2

我开发了一个基于Flash的聊天客户端,它显示属于一个组的用户发布的消息以及他们的用户名和写作时间。数据存储在具有组ID,用户ID和消息的mysql数据库中,因此它可以在聊天会话之外持续存在,并允许用户稍后登录以查看讨论,而不是聊天,更多的是公告板。当用户写入消息时,我希望聊天客户端立即更新,看起来是实时聊天。到目前为止,我的解决方案是在我的flash代码中包含一个间隔,该间隔调用一个PHP页面,该页面向数据库查询新注释并将其返回给Flash。

我想从我所读到的这种方法被称为长轮询?是对的吗?这个体积足够强大吗?当有变化时,我会更好地将数据推送到客户端吗?如何检测这些变化?我以APE为例,但我不认为这会将消息存储在数据库中。

有什么建议?

php flash chat long-polling
2个回答
2
投票

关于民意调查的坏处是,它可能会变得非常昂贵。

让我们假设,您有10000名在线用户,他们希望聊天的延迟时间不超过1秒。然后你将以每秒10000个请求轰炸你的服务器。

对于较小的事物或不需要更新的事物,轮询是一种很好的方法,因为它简单而且不会真正出错。

如果这只适用于最多有100人使用聊天的小型社区,那么这应该不是问题。

除此之外,您可以使用APE或SmartFox,或Red5或许多不同的东西来创建持久中继服务器,即与所有客户端具有永久连接并通知他们任何更改(例如新消息)的服务器。

一如既往,我个人的建议是使用Haxe。您可以使用chat tutorial开始使用。 Haxe有着相当陡峭的学习曲线,但我认为这完全是值得的。我很高兴将ActionScript和PHP都抛在身后。

编辑:你描述的不是long polling。此外,您几乎不能使用PHP进行长时间轮询,至少如果经常与Apache一起使用。 Apache将创建一定数量的PHP进程。每当请求到达时,它都会寻找一个免费的PHP进程并让它处理请求。完成PHP过程后,它会将响应发送回客户端。如果没有可用的空闲进程,它将缓冲请求,直到进程可用。因此,如果您尝试使用经典方式使用PHP进行长轮询,则可以完全阻止整个服务器。


1
投票

如果您希望在收到新消息时通知应用程序,那么您必须在服务器上实现某种形式的应用程序来监视数据库/收到有关其更改的警报,然后将更新传递给客户端。

这应该比仅仅轮询更有效,因为如果你想到一个低流量的情况,通过轮询,你将无论如何都会从服务器中解脱出来 - 这样你只有在有理由时才会产生流量。 ..

当您键入注释时,您的客户端可以直接(通过Web服务)通知此应用程序更改,然后此帮助应用程序可以更新数据库...

应该说虽然我不是聊天节目的专家 - 从来没有亲自参与其中...

© www.soinside.com 2019 - 2024. All rights reserved.