2

假设一个网站已经注册了用户,并且有一种方法可以让他们通过网站在自己的好友列表中添加和删除好友。

现在,我想使用 ejabberd xmpp 服务器实时获取存在信息,但我不想让 xmpp 服务器为名册创建新数据库。有没有办法配置 ejabberd 以避免 ejabberd 服务器和网站服务器上的数据重复?

4

2 回答 2

4
  1. 如果您不想编写自定义 ejabberd 模块,可以将 ejabberd 配置为从 SQL 数据库加载名册。如果您的所有花名册修改都是由您的 webapp 完成的,那么从 ejabberd 的角度来看,数据库是“只读的”,您可以编写一个 SQL 视图,该视图具有 ejabberd 预期的模式,但使用您已经拥有的数据表。请参阅表定义https://github.com/processone/ejabberd/blob/master/src/odbc/mysql.sql ,您需要“rosterusers”和“rostergroups”表。请注意,这种方法有一些限制。除非您的应用程序通知 ejabberd,否则连接的用户不会立即看到名册的更改,因此 ejabberd 可以通知客户端。为此,您可能无论如何都需要编写自定义代码,并了解名册推送http://xmpp.org/rfcs/rfc3921.html#roster

  2. 或者您可以编写自己的自定义模块来访问您的花名册数据。

于 2013-06-04T19:16:45.940 回答
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 客户端添加名册。使用此过程,所有名册更新事件都将反映在所有连接上。

于 2013-06-05T11:39:26.343 回答