2016-09-29 6 views
1

Мы обновляем кометуд с версии 2.5 до 3.0.9, но с отключенными веб-камерами. Одно из изменений, которое мы замечаем: - org.cometd.server.ServerSessionImpl метод disconnect() больше не устанавливает успешный флаг в сообщении, прежде чем публиковать его на канале «/ meta/disconnect». Заметил из репозитория cometd GitHub, что он был удален как часть фиксации 14 октября 2015 г. - Улучшена обработка серверных отключений (пользовательский sbordet).CometD v3.0.9 - разъединение на стороне сервера не устанавливает успешный флаг в сообщении (канал/мета/отсоединение)

public void disconnect() 
{ 
    boolean connected = _bayeux.removeServerSession(this, false); 
    if (connected) 
    { 
     ServerMessage.Mutable message = _bayeux.newMessage(); 
     message.setChannel(Channel.META_DISCONNECT); 
     // message.setSuccessful(true); 
     deliver(this, message); 
     flush(); 
    } 
} 

Теперь на стороне клиента, мы используем JQuery для взаимодействия с cometd (jquery.cometd.js). Мы отправляем повторное подключение всякий раз, когда получаем сообщение об отключении кометы от сервера. Мы проверяем условие ниже, прежде чем пытаться повторно подключиться.

$.cometd.isDisconnected() && (message.channel == "/meta/disconnect" && message.successful) 

message.successful проверка не удалась, как его никогда не устанавливается на стороне сервера из-за изменения в разъединителя API. Следовательно, сеанс никогда не восстанавливается и не восстанавливается, тем самым лидируя сервер вообще не знать об этом сеансе, и поэтому серверная сторона не выводит сервер на служебные сообщения на стороне клиента.

Мы хотим сохранить эту проверку, как во время выхода, этот флаг успешно установлен. Во время выхода из системы мы вызываем метод нижерасположенной стороны, который, в свою очередь, вызывает вызов DisconnectHandler на стороне сервера (под BayeuxServerImpl) для вызова. Событие сообщения DisconnectHandler устанавливает для этого флага значение true в ответном сообщении.

$.cometd.disconnect() 

В первую очередь, хочу понять, почему флаг успеха не установлен на cometd сообщения об отключении больше, когда разъединение инициируется со стороны сервера (было бы ожидать, что это будет соответствовать DisconnectHandler поведению). Во-вторых, существует ли возможная альтернатива по-прежнему устанавливать этот флаг, то есть может быть через переопределение либо на стороне клиента, либо на стороне сервера?

ответ

1

Флаг successful был удален из сообщения об отключении на стороне сервера, поскольку это незапрашиваемое сообщение, а не ответ на инициированное клиентом сообщение об отключении, и необходимо было провести различие между ними.

Необязательные сообщения не имеют сообщений id или successful полей.

Если сервер отключил клиента и вы хотите повторно подключить этот клиент, достаточно зарегистрировать прослушиватель для канала /meta/disconnect. Для обоих нежелательных разъединений и для ответов на разъединение будет вызываться прослушиватель, и вы можете вернуть handshake(), если хотите.

+0

Спасибо Simone за ваш ответ. Так как я понимаю, мы можем отправить сообщение. То есть, при прослушивании/мета/отсоединении, проверьте этот флаг только в том случае, если он доступен. Следовательно, проверка будет продолжаться, как и для отключенных клиентом отключений, и не будет происходить для инициированных сервером (т. Е. Незапрашиваемых сообщений) из-за отсутствия этого флага. – crathour

+0

В отдельном примечании мы всегда наблюдаем, на консоль браузера после обновления с помощью javascript cometd, хотя это не влияет на какие-либо функции. Это то, о чем мы должны беспокоиться? 'Исключение во время выполнения повторной перезагрузки. Аннотация. . Наше первоначальное наблюдение заключается в том, что это происходит, когда сообщение принадлежит каналу/meta/connect, а id -« 402: Неизвестный клиент ». Может быть очень хорошо случаться в других случаях, но не уверен ... В любом случае, повторная логика приводит сообщение к действительному идентификатору и, следовательно, не видит никакого эффекта. – crathour

+0

'Исключение во время выполнения обновления перезагрузки Abstract 'происходит из-за того, что у вас нет библиотеки файлов cookie, которая переопределяет эти« абстрактные »методы. Что вы используете, jQuery или Dojo? – sbordet

 Смежные вопросы

  • Нет связанных вопросов^_^