如何设计自定义模块,根据发件人设置的计划时间将消息发送到接收器?
Erlang和ejabberd对我来说都是新手。完成教程http://metajack.im/2008/08/28/writing-ejabberd-modules-presence-storms/后, http://anders.conbere.org/2008/07/17/building_ejabberd_modules_-_part_2_-_generic_modules.html, http://anders.conbere.org/2008/08/06/building_ejabberd_modules_-_part_4_-_xmpp_bots, 来自http://learnyousomeerlang.com,http://docs.ejabberd.im/developer/hooks/的几个章节我提出了以下原始设计。
从发件人方面,
发件人可以发送新的“类型”节,其中包含消息和以xml属性编码的计划信息,然后发送到ejabberd服务器或
发件人可以将另一个日程安排xml属性标记添加到“message”节。这两种方法中哪一种更可取,还是有其他更好的选择?
过滤模块,使用 filter_hook 停止向接收方发送“预定消息”并启动一个进程,该进程将在“Mnesia”数据库中搜索预定消息 (或“schedule”类型节)并根据schedule参数设置计时器。一旦计时器超时,消息就从“Mnesia”数据库中取出并发送 到接收器。(“我假设这些消息存储在”Mnesia“数据库中供以后检索。如果不是这样,请纠正我)
另一个使用 user_available_hook 的模块,它应该启动一个进程,在“Mnesia”数据库中搜索预定的消息(或“schedule”类型节) 并根据schedule参数设置计时器。一旦计时器超时,消息将从“Mnesia”数据库中取出并发送到接收器。这个模块是要处理的 接收器离线时发送的“预定消息”。
但是这种设计很可能会降低性能,因为“Mnesia”数据库经常被搜索。设计这样一个模块有更好的选择或建议吗?
编辑2:有关实际问题的更多说明 我们的想法是向xmpp客户端添加一项功能,发件人可以控制何时传递邮件(例如:提前发送生日祝贺但是会将其发送给接收者仅在生日时)而不是立即发送消息。