【问题标题】:ejabberd and custom rosterejabberd 和自定义名册
【发布时间】:2012-09-16 07:59:38
【问题描述】:

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

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

编辑

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

1)首先,在odbc_queries里面,把get_roster函数里面的query给

"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.

然后呢?

【问题讨论】:

    标签: erlang xmpp ejabberd rostering


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-08-29
        • 1970-01-01
        • 2020-08-12
        • 2015-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 2017-09-09
        相关资源
        最近更新 更多