在数据库中存储 ejabberd 存在信息

Storing ejabberd presence info in database

假设这个概念设置:

同样相关的是,目前网站实例已经直接访问 ejabberd MySQL 数据库,以添加新用户(不需要花名册和其他类似的东西,所以 xml_rpc 开销是避免了-尽管将来可能会改变)。

现在我想编写一个模块,将状态信息存储在可以从网站访问的数据库中。

哪种解决方案的可扩展性和稳定性更好?

  1. 向 ejabberd 添加一个新的 table MySQL table 并使用与 ejabberd 其他地方使用的相同类型的代码来与数据库对话以写入在线信息

  2. 分离 http 请求并让网络服务器进行写入

我不熟悉 Erlang 以及 hangups/bottlenecks 可能在哪里...我想这两种方法有些相似,数据库方法会更好,因为内部已经支持连接池。 .. 但只是想在开始编码之前检查一下。

您可以使用其他方法,或者:

  1. 查询 ejabberd 以从内存中获取存在。您可以为此使用 HTTP,使用 XML-RPC 或 Rest API.

  1. 为 ejabberd 使用 Redis 会话后端并从 Redis 读取会话状态。您可能需要查看 sm_db_type 选项。出于性能原因,如果会话在线,它只会存储一条记录,但不会存储用户的实际存在。这种 Redis 方法不会更改身份验证后端,并且用于临时会话。

情况 1 更有效,但可能不实用,具体取决于您打算如何使用在线状态。情况 2 的效率稍低一些,但在所有情况下,都比使用 MySQL 或 HTTP 请求更有效。