即使所有人都离开会议室后,临时Muc会议室也不会被删除

时间:2019-08-25 19:03:39

标签: ejabberd ejabberd-module

我正在使用ejabberd-18.09。根据文档,我认为一旦会议室中的每个成员离开会议室,都应该将其删除。

但是在我们的ejabberd仪表板上,我看到服务器上仍然存在一个月前创建的会议室。

我可以在ejabberd仪表板上看到

JabberID ->   myroom@conference.example.com
participants -> 0
Last message -> A long time ago
Public -> true  
Persistent -> false
Logging -> false
Justcreated -> true

还有一些房间信息类似。

我的房间配置是这样的

    host: "conference.@HOST@"
    access:
      - allow
    access_admin:
      - allow: admin
    access_create: all
    access_persistent: muc_create
    default_room_options:
      allow_change_subj: false
      allow_query_users: true
      allow_private_messages: true
      members_by_default: true
      anonymous: true
    max_users: 10

我在这里迷路了。为什么会发生?

有人可以在这里帮助我吗?

编辑

我正在使用mod_muc:create_room / 5创建房间。然后,我从ejabberd向其他用户发送直接邀请给其他用户,他们接受了这些用户,然后加入了聊天室。

要销毁房间,客户端会在正常情况下发送destroy数据包以销毁聊天,但是如果我们的客户端在创建房间的一定时间后未能发送销毁数据包(出于各种原因,例如应用程序处于后台) ,电话等),他们只是离开房间,在这种情况下,我希望临时房间在每个人离开后被摧毁的地方发挥作用。

这些是ejabberd.log文件中的日志

<0.23497.0>@mod_muc_room:init:137 Created MUC room myroom@conference.example.com by user1@example.com/xiaomi

<0.23476.0>@ejabberd_c2s:process_terminated:262 (tcp|<0.23476.0>) Closing c2s session for user1@example.com/xiaomi: Stream reset by peer
2019-08-26 17:15:13.201 [info] <0.23497.0>@mod_muc_room:close_room_if_temporary_and_empty:1120 Destroyed MUC room myroom@conference.example.com because it's temporary and empty
2019-08-26 17:15:13.201 [info] <0.23497.0>@mod_muc_room:terminate:703 Stopping MUC room myroom@conference.example.com

在ejabberd仪表板中,有些房间具有值

JabberID ->   myroom1@conference.example.com
participants -> 0
Last message -> A long time ago
Public -> true  
Persistent -> false
Logging -> false
Justcreated -> true

虽然有一些

JabberID ->   myroom2@conference.example.com
participants -> 1
Last message -> A long time ago
Public -> true  
Persistent -> false
Logging -> false
Justcreated -> false

大多数情况下,有0个房间的房间有Justcreated as true,而只有1个房间的房间有Justcreated as false

2 个答案:

答案 0 :(得分:0)

  

根据文档,我认为应该有一个临时房间   房间的每个成员离开房间后都会被删除。

对。在ejabberd日志文件中,当用户加入新房间时:

18:04:06.637 [info] Created MUC room myroom@conference.localhost by user3@localhost/tka1
User leaves the room:
18:04:11.143 [info] Destroyed MUC room myroom@conference.localhost because it's temporary and empty
18:04:11.144 [info] Stopping MUC room myroom@conference.localhost

创建房间然后用户离开房间时,您在ejabberd.log中看到什么?

  

但是在我们的ejabberd仪表板上,我看到房间甚至创建了一个   服务器上仍然存在一个月前。

如何创建房间?

如果您使用桌面Jabber客户端(例如Gajim,Psi或其他客户端)创建一个客户端,则该空间在用户离开后是否还可以保留?

  

刚刚创建->正确

嗯,这很奇怪。刚创建房间时,将“刚创建”设置为true。立即执行加入第一个用户的代码,并且该代码将Justcreated设置为该用户的时间戳。

您所有的空房间和临时房间都创建了true吗?

答案 1 :(得分:0)

  

我正在使用mod_muc:create_room / 5创建房间。然后我发送   从ejabberd直接邀请其他用户到其他用户

最好使用为管理员提供的API:

$ ejabberdctl create_room room2 conference.localhost localhost
$ ejabberdctl send_direct_invitation room2 conference.localhost "" "Join this cool room" user4@localhost

顺便说一句;我在ejabberd中发现了问题,请尝试应用此补丁,因此命令create_room不会创建强制的持久空间:

diff --git a/src/mod_muc_admin.erl b/src/mod_muc_admin.erl
index 805e72481..9aed4a017 100644
--- a/src/mod_muc_admin.erl
+++ b/src/mod_muc_admin.erl
@@ -623,10 +623,7 @@ justcreated_to_binary(J) when is_atom(J) ->
 %%       ok | error
 %% @doc Create a room immediately with the default options.
 create_room(Name1, Host1, ServerHost) ->
-    case create_room_with_opts(Name1, Host1, ServerHost, []) of
-        ok -> change_room_option(Name1, Host1, <<"persistent">>, <<"true">>);
-        Error -> Error
-    end.
+    create_room_with_opts(Name1, Host1, ServerHost, []).

 create_room_with_opts(Name1, Host1, ServerHost, CustomRoomOpts) ->
     true = (error /= (Name = jid:nodeprep(Name1))),