ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议

 

 

 

修改privacy 利用推送 方式 更新privacy list  userlist

 updated_list(_, #userlist{name = OldName} = Old, #userlist{name = NewName} = New) ->

      if

         OldName == NewName ->

               New;

        true ->

                Old

      end.

 上传几个附近 备用

 

ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议

其中,设置默认和删除privacy list时没有判断当前privacy list 是否有资源在使用。仅仅在删除时候判断了privacy list是否是默认的。

如果是active的话,此状态存在用户资源当前进程中。其他资源进程不能直接读取,所以无法判断目前到底有多少个进程正在使用privacy list.

目前想到的解决方法:

1、建立一个内存表,每个进程与它的状态都写在里面。用的话查询一下就可以。

2、进程之间相互发送消息。”双方“提供相应的机制。

方法1存在的问题,如果一个用户邦定20个资源,当前有10000个用户(假设都在线),这时内存表里面存在的数据会是10*10000=200000。 还必须提供的相应的更新同步操作。用户数量直接影响效率。

方法2存在的问题 如果一个用户邦定20个资源,当前有10000个用户(假设都在线)。20个用户资源进程,其中一个更新,就必须与其他19个进行交互。与用户数量无关。

谁有其他的好方法?

 

 

你可能感兴趣的:(XMPP)