通过PHP实现浏览器之间的通信

4

我正在为学校项目构建一个简单的ajax聊天客户端,并想到了一种实现方式,但在我看来这种方法非常繁琐:

1) 用户A发送消息,该消息被服务器端的PHP脚本接受并保存到数据库中 2) 用户B的浏览器定期启动服务器端的PHP脚本,检查是否有用户B的任何消息。 PHP脚本找到来自用户A的消息并返回它们。

这是正确的方法吗?这两个用户之间的通信是否可以在没有数据库的情况下实现?

(这是我的第一个Web应用程序...如果没有浏览器+HTTP,我会制作一个Java程序,其中包含监听TCP套接字的持久类,并将消息转发到适当的地址)


请查看下面持久的http请求,如果您想要一个聪明的方法,我会使用它。 - Layke
6个回答

3

是的,你的解决方案已经足够好了。你正在轮询服务器是否有特定用户的聊天消息。这已经很不错了。

但是如果你想要进一步提升(可能会很困难),你可以拥有一个可以将新消息推送到客户端浏览器的服务器。这被称为“Comet”。但如果你的用户群体将超过数千人,则需要大量的服务器资源。

先尝试你的方法,然后再考虑使用这个方法。


1
不 - Comet不会推送消息 - 它通过强制客户端等待响应的时间来模拟这种行为。 - symcbean

2
每个PHP“实例”仅在请求期间持续存在,因此您需要一个持久存储库,例如数据库,用于聊天消息。
是的,我知道这可行,因为我以前实现过非常类似的系统。

2

彗星方法

Teehoo,如果你需要一种工作方法,你提出的建议对于学校项目来说是不错的。

如果你想要像Facebook那样的方式,你应该看看Comet HTTP连接。这非常聪明。我记得当我第一次听说它时,我觉得它非常巧妙。它提供了快速更新,并通过不断轮询新消息来保持与Web服务器的连接,几乎消除了AJAX依赖。

阅读有关Comet HTTP连接的内容(但不要查看Comet Chat应用程序,因为它们是一家试图销售类似于Facebook聊天应用程序的产品的公司,而不是你想要的东西...尽管他们已经实现了Comet方法)。

Comet Chat #

http://en.wikipedia.org/wiki/Comet_(programming))

然后阅读这个:

http://www.zeitoun.net/articles/comet_and_php/start

但无论如何,你提出的建议对于学校项目来说都可以。


0

是的,你可以不使用数据库来完成。

但是...你必须以某种方式将数据存储在中央服务器上。对于聊天应用程序,理性数据库并不是这种聊天类型应用程序的理想选择,但只有在你拥有一个大型网站时才真正相关。如果你正在为项目做这个,那么数据库就足够好了,你只需要使用javascript/ajax轮询数据库获取新消息即可。

如果你有兴趣不使用数据库,我建议使用非SQL方法。谷歌是你的朋友,因为有很多选择。


0
这是正确的方法吗?这两个用户之间的通信可以在没有数据库的情况下实现吗?
至少需要某种形式的存储 - 数据的持久性特征由您决定。数据库是将数据持久化一段时间的好方法。
您还可以考虑通过共享内存存储(例如memcache)来进行。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接