我正在为一个学校项目构建一个简单的ajax聊天客户端,并想到了实现这一点的方法,但似乎IMO 非常繁琐的方法:
1)用户A发送一条服务器端PHP脚本接受并保存到数据库的消息 2)用户B的浏览器定期启动服务器端PHP脚本以检查数据库中是否有用户B的消息.PHP脚本从用户A查找消息并返回它们。
这是正确的做法吗?没有数据库可以实现这两个用户之间的通信吗?
(这是我的第一个网络应用程序......如果我在没有浏览器+ HTTP的情况下进行此操作,我只会创建一个带有持久类的Java程序,该类程序可以侦听TCP套接字,并将消息转发到相应的地址)
答案 0 :(得分:3)
是的,您的解决方案足以启动。如果有特定用户的聊天消息,您正在做的是轮询服务器。够好了。
但是如果你想转到下一个级别(可能很难),你可以拥有一个可以将新消息推送到客户端浏览器的服务器。这被称为“彗星”。但它需要大量的服务器资源(如果您的用户群将超过数千)。
首先尝试使用您的方法然后再进行此操作。
答案 1 :(得分:2)
每个PHP“实例”仅持续请求的持续时间,因此您需要一个持久存储,例如聊天消息的数据库。
是的,我知道这确实有效,因为我过去实现了一个非常相似的系统。
答案 2 :(得分:2)
Teehoo,如果你想要一种工作方法,你所建议的就好了,特别是如果只是为了一个学校项目。
如果您想要像Facebook那样的方式,您应该查看commet HTTP连接。它非常聪明。我记得当我第一次阅读它时,我认为它是巧妙的。它通过不断轮询新消息来提供快速更新并几乎消除了AJAX依赖性,因为您始终保持与Web服务器的连接不断打开。
阅读彗星http连接,(但不要看彗星聊天应用程序,他们是一家公司试图销售类似于Facebook聊天应用程序的产品,而不是你想要的......虽然他们有实施了彗星方法)。
彗星聊天 #http://en.wikipedia.org/wiki/Comet_(programming))
然后阅读:
http://www.zeitoun.net/articles/comet_and_php/start
但无论如何,你建议对学校项目没问题。
答案 3 :(得分:0)
答案是肯定的。没有数据库就可以做到。
但是......你必须以某种方式将数据存储在中央服务器上。对于聊天应用程序,理性数据库对于这种聊天类型的应用程序并不理想,但如果你有一个大型网站,它只是真正相关的。如果您正在为项目执行此操作,那么数据库将足以存储聊天信息。你只需要使用javascript / ajax轮询数据库中的新消息。
如果您对不使用数据库感兴趣,我建议使用非SQL方法。谷歌是你的朋友,因为有很多选择。
答案 4 :(得分:0)
这是正确的做法吗?这两个用户之间的通信可以在没有数据库的情况下实现吗?
您至少需要某种形式的存储 - 数据的持久性特征取决于您。数据库是一种在较长时间内保存数据的好方法。
您还可以考虑通过共享内存存储,例如内存缓存。
答案 5 :(得分:0)
你还可以使用类似彗星的javascript方法。保持与浏览器打开的PHP页面的连接,直到PHP页面收到消息。
但是,您仍然只能为每个连接提供PHP页面,因此您需要一些存储空间。如果你想要它真的很快你就可以使用记忆。
在PHP中使用内存:http://www.php.net/manual/en/function.apc-add.php
Comet聊天方法:http://www.zeitoun.net/articles/comet_and_php/start#comet_with_classic_ajax_litte_chat_demo