3

我已经有一个非常简单的网站,拥有相当多的流量。

所以我决定添加一个网络聊天,让我的用户在他们的友谊中聊天。我决定使用ejabberd来完成这个任务。问题是:我已经有 2 个表(用户 [uid,昵称,pass] 和关系 [rid,uid,uid2]。我如何告诉 ejabber 使用这些表中的数据?我可以找到任何模块,像 auth 的一样,编辑和适应我的目的?

编辑

如果我不想使用 rosterusers 表,而是直接使用我的 elationships[rid, uid, uid2],你对我应该改变什么有什么建议吗?

1)首先,在odbc_queries里面,函数get_roster里面的查询

"select uid, uid2 from relationships "
       "where uid ='", Username, "'"]).

2) mod_roster_dbc 中的“元组列检查器”函数 get_roster

3)然后函数 raw_to_record 类似于

raw_to_record(LServer, {Uid,Uid2}) ->
case  jlib:make_jid(Uid2, LServer, "") of
error ->
    error;
JID ->
    LJID = jlib:jid_tolower(JID),
    Subscription = both,
    Ask = both,

      end,
    #roster{usj = {Uid, LServer, LJID},
        us = {Uid, LServer},
        jid = LJID,
        name = "",
        subscription = Subscription,
        ask = Ask,
        askmessage = ""}
end.

然后?

4

2 回答 2

1

对于联系人列表,您需要定义自己的名册模块。

您可以使用 mod_roster 或 mod_roster_odbc 作为起点。请注意,这些模块相当复杂,并提供对名册、订阅等的读/写访问。在您的情况下,您可能只需要读访问(因为朋友关系由您的网站管理),因此实现会简单得多(对于例如,您将需要处理“获取”IQ 请求,但无需处理“设置”IQ 请求)。

如果您需要对连接的用户立即可见的关系更改(而不是在下次登录时),您将需要在 ejabberd 端提供一个 API,以便在每次更改时从您的 webapp 调用,以便能够“推送”更新的名册信息给连接的用户。

于 2012-09-25T02:00:41.410 回答
0

查看 ejabberd_auth_odbc。它在 ejabberd_auth 后面工作,因此如果您的表不完全符合 xmpp 规范,那么编写自定义身份验证模块将很容易。

于 2012-09-25T00:42:58.347 回答