假设一个网站已经注册了用户,并且可以通过网站在他们自己的好友列表中添加和删除朋友。
现在,我想使用ejabberd xmpp服务器实时获取状态信息,但我不想让xmpp服务器为名册创建新的数据库。 有没有办法配置ejabberd以避免ejabberd服务器和网站服务器上的数据重复?
答案 0 :(得分:4)
如果您不想编写自定义ejabberd模块,可以将ejabberd配置为从SQL数据库加载名称。如果您的所有名单修改都是由您的webapp完成的,那么从ejabberd的角度来看,DB是“只读”的,您可以编写一个SQL视图,该视图具有ejabberd期望的模式,但使用您已有的数据表。 请参阅表定义https://github.com/processone/ejabberd/blob/master/src/odbc/mysql.sql,您需要“rosterusers”和“rostergroups”表。请注意,此方法有一些限制。连接用户不会立即看到名单中的更改,除非您的应用程序通知ejabberd,因此ejabberd可以通知客户。为此,您可能需要编写自定义代码,并了解名册推送http://xmpp.org/rfcs/rfc3921.html#roster
或者您可以编写自己的自定义模块来访问您的名册数据。
答案 1 :(得分:0)
默认情况下,Ejabberd为用户和名册等使用Mnesia数据库。 您可以使用SQL SERVER,MySQL,Postgress等外部数据库配置Ejabberd。
您必须将ejabberd配置为使用外部数据库(例如:odbc)而不是内部数据库。
请参阅以下内容,使用MySQL配置Ejabberd:
http://iohq.net/index.php?title=Building_an_Ejabberd_Server_with_MySql
之后,使用sql脚本在“users”和“rosteruser”表中传输具有适当订阅值的现有用户。连接用户不会立即看到直接在“rosteruser”中完成的名单更改。要解决此问题,您可以从应用程序逻辑(php / asp.net / java)获取好友请求确认事件,然后通过XMPP客户端添加名册。使用此过程,所有名单更新事件将反映在所有已连接的事件上。