我们有一个网站,我们使用strophe.js库和ejabberd XMPP服务器开发的聊天系统吧。我们使用与PHP开始(使用一个内部的库)会话连接。我们做的是让RID和SID从PHP脚本,然后使用的strophe的会话连接。上述RID和SID存储在cookie中,并在cookie中的RID值更新strophe.js的RID的每一次更新。

这工作得很好,在登录后,我们收到我们的每一个接触的存在状态。这样做的问题是,当你去到另一个网页的网站上,并附上使用该RID(我们使用的strophe产生的递增值)和SID,服务器不会发送您的联系人的状态信息了,而不是当你。登录这引起了我们的接触面积出现,即使他们是在网上都看不到。它们只会出现在网上,如果你(或你的联系人)退出聊天,然后再次登录(因为你会从XMPP服务器接收在场更新)。

我已经写在您的联系人的存在状态都保存在cookie中的解决方法(所有在线联系人都会有自己的JID保存上的Cookie)时,从服务器接收存在。这是检查每一个页面加载,如果Cookie设置,它会被读取,并在所有的cookie将JID的被标记为联机。这是工作正常,但可能有一些更好的方式来解决这个问题,使用XMPP的默认行为。

有帮助吗?

解决方案

XMPP服务器发送存在探测到所有代表联系人时你把你自己的初始存在的服务器。从此,你将只能从您的联系人收到状态更改。

如果你失去了你的联系人的在线状态,您将需要发送自己的存在探头重新建立该状态。然而,这可能不是你想要做了很多事情,并绕过存在状态在大多数情况下可能是首选。

您可以尝试通过XMPP传递状态。例如,可以使用专用XML存储(XEP-0049),发布 - 订阅(XEP-0060),或PEP(XEP-0163)。

另一种选择,而不是饼干的传递客户端是使用HTML5 SharedWorker对象来保存状态。

其他提示

我不敢想像与存储所有你刚刚从私人存储服务器返回到服务器接收的存在相关联的规模属性。私人存储几乎总是被备份到长期存储,而不是存储在内存中,所以你要磨你服务器的磁盘灰尘。

如果你想存储在浏览器更多的状态,并从浏览器版本隔离自己,你已经使用jQuery,然后的 jStore 是非常甜。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top