我知道最好的方法是使用XMPP,但我没有使用它的经验.我希望使用PHP实现这一点.
我已经下载了XMPPHP,我编辑了一个示例,在GMail中向我的Google聊天客户端发送消息,但是当我回复谷歌告诉我另一端没有得到消息.
到目前为止,最丰富的教程是http://www.ibm.com/developerworks/xml/tutorials/x-realtimeXMPPtut/,但我不明白为什么我需要安装’Openfire’,我也不想在我的本地机器上构建网站.
有人可以告诉我我需要什么(更重要的是,为什么)设置这个项目,以便我可以开始为它构建代码?
为了使聊天感觉正确,必须对回复有一些即时性.随着时间的推移,用户会注意到一秒钟的滞后时间,并给人一种不合时宜的感觉.要在浏览器中立即或“实时”响应,需要持久连接,以便在新信息进入时立即显示.
由于HTTP的请求/响应规范,浏览器中的持久连接很困难.工作中有一些规范可以为浏览器提供持久连接,但这些浏览器并不是普遍存在的.在未来,持久性连接将由WebSockets和SPDY提供,这两种版本都可以在Chrome,Safari和FireFox的最新版本中使用,而且IE有些滞后.
持久连接的另一个选项是XMPP.XMPP是用于Jabber聊天客户端的协议.由于它是一个开源实现,因此它已被移植到许多其他用途.存在JavaScript库,允许您将浏览器连接到XMPP套接字并侦听新消息.我过去看到的方法是将消息发送到Web服务器,然后让Web服务器告诉XMPP服务器有关新消息的信息,然后将新消息广播给所有用户.但是,这需要一个XMPP服务器,这会增加系统的复杂性.
大多数用户并不处于浏览器版本的最前沿,因此您需要能够处理旧版浏览器.大多数替代方案涉及打开与服务器的长时间连接,每当新数据到达时它都会响应.以下是在旧版浏览器中模拟持久连接的方法列表:
> Adobe Flash Socket
> ActiveX HTML文件(IE)
>服务器发送事件(Opera)
> XHR与多部分编码
> XHR与长轮询
这些旧方法和WebSockets由名为Juggernaut的库提供支持.
更新Juggernaut has been deprecated by the maintainer,理由充分:现代浏览器通过称为服务器发送事件(SSE)的规范支持开箱即用的持久连接(当然除了IE).向后兼容性现在由polyfills(What is a polyfill?)处理,并且如弃用文章所述,有几个很好的将SSE带到旧版浏览器.