8

我正在寻找开发一个网站,该网站具有网站访问者和网站管理员之间的聊天功能。

我知道最好的方法是使用 XMPP,但是我没有使用它的经验。我希望使用 PHP 来实现它。

我已经下载了 XMPPHP 并编辑了一个示例以在 GMail 中向我的 Google Chat 客户端发送消息,但是当我回复 Google 时告诉我另一端没有收到消息。

到目前为止,信息最丰富的教程是http://www.ibm.com/developerworks/xml/tutorials/x-realtimeXMPPtut/但我不明白为什么我需要安装“Openfire”也不想建立网站在我的本地机器上。

有人可以告诉我我需要什么(更重要的是,为什么)来设置这个项目,这样我就可以开始为它构建代码了吗?

4

3 回答 3

9

从对其他答案的评论来看,我将告诉你为什么,以及一些什么,但不会给你一个解决方案,因为我在“相关”侧边栏中看到了大量的解决方案。您必须选择正确的,并且通过了解“原因”,您将能够做出有根据的决定。

为了让聊天感觉正确,响应必须有一些即时性。随着时间的推移,用户会注意到一秒钟的时间延迟,并给人一种不合时宜的感觉。要在浏览器中进行即时或“实时”响应,需要持久连接,以便当新信息进入时,它会立即显示出来。

由于 HTTP 的请求/响应规范,浏览器中的持久连接很困难。有一些规范可以为浏览器带来持久连接,但这些浏览器并不普遍。未来持久连接将由WebSocketsSPDY提供,这两者都可以在最新版本的 Chrome、Safari 和 FireFox 中使用,但 IE 有点滞后。

持久连接的另一个选项是XMPP。XMPP 是用于 Jabber 聊天客户端的协议。由于它是一个开源实现,它已被移植到许多其他用途。JavaScript 库允许您将浏览器连接到 XMPP 套接字并侦听新消息。我过去看到的方法是将消息发送到 Web 服务器,然后让 Web 服务器将新消息告诉 XMPP 服务器,然后 XMPP 服务器将新消息广播给所有用户。但是,这需要一个 XMPP 服务器,这增加了系统的复杂性。

大多数用户并不处于浏览器版本的前沿,因此您需要能够处理较旧的浏览器。大多数替代方案涉及打开与服务器的长期运行连接,该连接在新数据到达时响应。以下是在旧浏览器中模拟持久连接的方法列表:

  • Adobe Flash 插座
  • ActiveX HTML 文件 (IE)
  • 服务器发送事件 (Opera)
  • 多部分编码的 XHR
  • XHR 长轮询

这些较旧的方法和 WebSockets 由一个名为Juggernaut的库支持。

UPDATE Juggernaut 已被维护者弃用,原因很充分:现代浏览器通过称为服务器发送事件 (SSE) 的规范支持开箱即用的持久连接(当然 IE 除外)。向后兼容性现在由 polyfills 处理(什么是 polyfill?),正如弃用帖子所指出的,有几个很好的方法可以将 SSE 引入旧版浏览器。

于 2012-07-02T21:24:40.897 回答
0

有很多资源可以帮助您解决这个问题。快速的 Google 搜索会显示以下内容:

http://sixrevisions.com/tools/10-free-website-chat-widgets-to-make-your-site-interactive/

http://www.phpfreechat.net/

http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-simple-web-based-chat-application/

于 2012-06-14T16:36:59.617 回答
0

即时消息应用程序应该是实时的。一个网站在使用请求/响应方法的 HTTP 协议上工作。一种方法是轮询。向服务器发送用户新待处理消息的请求。服务器应该能够区分已发送的消息和尚未发送的消息。这种方法称为轮询。您的浏览器不断要求服务器发送任何待处理的消息。但这可能会浪费带宽并消耗电池(如果使用智能手机访问网站)。更好的选择是仍然使用 XMPP 服务器。

于 2017-07-04T17:42:53.260 回答