2016-06-19 2 views
1

Недавно я скомпилировал последний ejabberd-код из github на моей машине Arch Linux. Я новичок в ejabberd, поэтому я, возможно, допустил ошибку новичков.Ejabberd: сообщения Xmpp удаляются, если отправлено до его возврата resume_timeout

У меня возникла проблема, когда в конкретном сценарии пакеты не достигают целевого клиента. Это происходит, если сообщение отправляется после клиент отключается, но до сеанс клиента закрыт из-за resume_timeout.

Я следую инструкциям, указанным здесь https://www.ejabberd.im/faq/tcp, но все же я не смог обработать все случаи.

Соответствующие части моего ejabberd.yml выглядеть

listen: 
    - 
    port: 5222 
    module: ejabberd_c2s 
    max_stanza_size: 65536 
    resend_on_timeout: true 
    resume_timeout: 60 
    shaper: c2s_shaper 
    access: c2s 

    - 
    ## Not sure if resend_on_timeout is required here 
    port: 5280 
    module: ejabberd_http 
    resend_on_timeout: true 
    resume_timeout: 60 
    http_bind: true 

modules: 
    ... 
    mod_offline: 
    access_max_user_messages: max_user_offline_messages 
    mod_ping: 
    send_pings: true 
    ping_interval: 60 
    timeout_action: kill 

Вот вывод лога ejabberd, соответствующий acitivites клиента:

  1. Клиент A отсоединяет нечистоплотный

    2016-06-19 10:59:51.369 [info] <0.549.0>@ejabberd_c2s:fsm_next_state:2454 Waiting for resumption of stream for [email protected]/Smack` 
    
  2. Клиент B Входит в систему и отправляет сообщение A

    2016-06-19 11:00:00.320 [info] <0.510.0>@ejabberd_listener:accept:333 (#Port<0.19876>) Accepted connection 139.162.34.247:41186 -> 139.162.34.247:5222 
    2016-06-19 11:00:00.575 [info] <0.559.0>@ejabberd_c2s:wait_for_sasl_response:900 ({socket_state,fast_tls,{tlssock,#Port<0.19876>,#Port<0.19877>},<0.558.0>}) Accepted authentication for echo by undefined from 137 
    2016-06-19 11:00:00.715 [info] <0.559.0>@ejabberd_c2s:open_session:1111 ({socket_state,fast_tls,{tlssock,#Port<0.19876>,#Port<0.19877>},<0.558.0>}) Opened session for [email protected]/13353511976792329881266 
    2016-06-19 11:00:00.776 [info] <0.559.0>@ejabberd_c2s:handle_enable:2700 Stream management with resumption enabled for [email protected]/13353511976792329881266 
    2016-06-19 11:00:00.984 [info] <0.559.0>@ejabberd_c2s:terminate:1778 ({socket_state,fast_tls,{tlssock,#Port<0.19876>,#Port<0.19877>},<0.558.0>}) Close session for [email protected]/13353511976792329881266 
    
  3. Клиент Сеанс окончательно закрыт из-за resume_timeout

    2016-06-19 11:00:51.370 [info] <0.549.0>@ejabberd_c2s:terminate:1778 ({socket_state,gen_tcp,#Port<0.19869>,<0.548.0>}) Close session for [email protected]/Smack 
    
  4. Клиент A снова входит в

    2016-06-19 11:01:14.078 [info] <0.510.0>@ejabberd_listener:accept:333 (#Port<0.19879>) Accepted connection 122.172.241.21:26597 -> 139.162.34.247:5222 
    2016-06-19 11:01:14.707 [info] <0.566.0>@ejabberd_c2s:wait_for_sasl_response:900 ({socket_state,gen_tcp,#Port<0.19879>,<0.565.0>}) Accepted authentication for 9739937980 by undefined from 122.172.241.21 
    2016-06-19 11:01:14.868 [info] <0.566.0>@ejabberd_c2s:open_session:1111 ({socket_state,gen_tcp,#Port<0.19879>,<0.565.0>}) Opened session for [email protected]/Smack 
    2016-06-19 11:01:14.966 [info] <0.566.0>@ejabberd_c2s:handle_enable:2700 Stream management with resumption enabled for [email protected]/Smack 
    

В соответствии с этим руководством, https://www.ejabberd.im/faq/tcp, после resume_timeout истекает, незакрепленные сообщения должны обрабатываться mod_offline. Но этого не происходит.

Результат: сообщение не доходит до клиента.

Любые указатели?

+0

Неужели вы попытались сократить время ожидания resume_timeout. Попробуем изменить его на 20 или установить ping_interval более чем на 60. –

ответ