在数据库中存储 ejabberd 存在信息
Storing ejabberd presence info in database
假设这个概念设置:
- ejabberd 集群(云中的实例或托管 SaaS)
- ejabberd MySQL 数据库(其他地方的一些托管解决方案)
- 网站实例
- 网站MySQL数据库(与ejabberd数据库相同的地方,但不同的数据库)
同样相关的是,目前网站实例已经直接访问 ejabberd MySQL 数据库,以添加新用户(不需要花名册和其他类似的东西,所以 xml_rpc 开销是避免了-尽管将来可能会改变)。
现在我想编写一个模块,将状态信息存储在可以从网站访问的数据库中。
哪种解决方案的可扩展性和稳定性更好?
向 ejabberd 添加一个新的 table MySQL table 并使用与 ejabberd 其他地方使用的相同类型的代码来与数据库对话以写入在线信息
分离 http 请求并让网络服务器进行写入
我不熟悉 Erlang 以及 hangups/bottlenecks 可能在哪里...我想这两种方法有些相似,数据库方法会更好,因为内部已经支持连接池。 .. 但只是想在开始编码之前检查一下。
您可以使用其他方法,或者:
- 查询 ejabberd 以从内存中获取存在。您可以为此使用 HTTP,使用 XML-RPC 或 Rest API.
或
- 为 ejabberd 使用 Redis 会话后端并从 Redis 读取会话状态。您可能需要查看 sm_db_type 选项。出于性能原因,如果会话在线,它只会存储一条记录,但不会存储用户的实际存在。这种 Redis 方法不会更改身份验证后端,并且用于临时会话。
情况 1 更有效,但可能不实用,具体取决于您打算如何使用在线状态。情况 2 的效率稍低一些,但在所有情况下,都比使用 MySQL 或 HTTP 请求更有效。
假设这个概念设置:
- ejabberd 集群(云中的实例或托管 SaaS)
- ejabberd MySQL 数据库(其他地方的一些托管解决方案)
- 网站实例
- 网站MySQL数据库(与ejabberd数据库相同的地方,但不同的数据库)
同样相关的是,目前网站实例已经直接访问 ejabberd MySQL 数据库,以添加新用户(不需要花名册和其他类似的东西,所以 xml_rpc 开销是避免了-尽管将来可能会改变)。
现在我想编写一个模块,将状态信息存储在可以从网站访问的数据库中。
哪种解决方案的可扩展性和稳定性更好?
向 ejabberd 添加一个新的 table MySQL table 并使用与 ejabberd 其他地方使用的相同类型的代码来与数据库对话以写入在线信息
分离 http 请求并让网络服务器进行写入
我不熟悉 Erlang 以及 hangups/bottlenecks 可能在哪里...我想这两种方法有些相似,数据库方法会更好,因为内部已经支持连接池。 .. 但只是想在开始编码之前检查一下。
您可以使用其他方法,或者:
- 查询 ejabberd 以从内存中获取存在。您可以为此使用 HTTP,使用 XML-RPC 或 Rest API.
或
- 为 ejabberd 使用 Redis 会话后端并从 Redis 读取会话状态。您可能需要查看 sm_db_type 选项。出于性能原因,如果会话在线,它只会存储一条记录,但不会存储用户的实际存在。这种 Redis 方法不会更改身份验证后端,并且用于临时会话。
情况 1 更有效,但可能不实用,具体取决于您打算如何使用在线状态。情况 2 的效率稍低一些,但在所有情况下,都比使用 MySQL 或 HTTP 请求更有效。