我已经在 debian 10 上从 debian 数据包(版本 18.12)配置了一个 ejabberd 实例。我有 3 个虚拟主机(我们称之为 example1.com、example2.com 和 example3.com)。
第一个使用 LDAP 与我们的 Active Directory 通信,以便对用户进行身份验证,其他的则使用 SQL(mysql)后端来保存用户凭据。
需要的是,这 3 个域中的每个用户都必须在其名册中看到所有其他用户。
为了实现这一点,我为每个虚拟主机创建了 4 个共享烘焙机:
- 第一个有 @all@ 作为成员,但没有显示组,我使用它将所有成员“导出”到其他 2 个域
- 第二个以 @all@ 作为成员,以自身作为显示组,以便该域的所有用户都能看到自己。
- 另外两个从其他域“导入”“导出”的共享组。
这有点像工作...我可以看到所有用户,按我想要的方式分组,但是每次有人登录时服务器都会消耗太多的 CPU(或看起来如此)。
我担心的是,我已经实现了循环依赖,并且服务器不断循环运行,遍历所有列表。
我这样做合法吗?有没有更好的方法来实现这一点?
谢谢
答案1
如果存在循环,ejabberd 要么 A) 消耗所有资源并严重崩溃:您会注意到!,要么 B) 检测循环并在日志文件中抛出一条崩溃消息:在用户登录时查找这样的事情。
另一种可能性是,如果您的域名有许多帐户(比如说数百或数千个),那么这很简单,就是一个瓶颈:有太多元素需要 CPU 处理,或者需要存储在 RAM 中,或者需要通过网络传送。
如果瓶颈是网络,您可以在某些组中尝试使用@online@而不是@all@...