Я тестирую приложение чата, использующее инфраструктуру Atmosphere. Когда я подключаюсь к приложению из двух браузеров, все работает, как чат, должен работать с Tomcat 7.0 и Используется протокол Websockets.Длительный опрос с проблемой атмосферы с сервлетом 2.5
Когда я понижаюсь до Tomcat 6.0. или когда я использую Weblogic 10.3.6 используется длинный опрос (как и ожидалось). С одним браузером, беседующим с самим собой, все работает, но когда я открываю второй браузер, оба окна отключены.
Я установил уровень журнала для отслеживания и, кажется, что атмосфера добавляет каждый AtmosphereResource с тем же UUID набор 10000:
TRACE [http-8080-6] o.a.c.DefaultAtmosphereResourceFactory [DefaultAtmosphereResourceFactory.java:309] Adding: AtmosphereResource{ uuid=10000, transport=LONG_POLLING, isInScope=true, isResumed=false, isCancelled=false, isSuspended=true, broadcasters=/chat, isClosedByClient=false, isClosedByApplication=false, action=Action{timeout=-1, type=SUSPEND}}
Мой Chat.java класс:
@AtmosphereHandlerService(path = "/chat",
broadcasterCache = UUIDBroadcasterCache.class,
interceptors = {
AtmosphereResourceLifecycleInterceptor.class,
BroadcastOnPostAtmosphereInterceptor.class,
SuspendTrackerInterceptor.class,
HeartbeatInterceptor.class
},
broadcaster = SimpleBroadcaster.class
)
public class Chat extends OnMessage<String> {
private final Logger logger = LoggerFactory.getLogger(Chat.class);
private final JacksonDecoder decoder = new JacksonDecoder();
private final JacksonEncoder encoder = new JacksonEncoder();
@Override
public void onMessage(AtmosphereResponse response, String message) throws IOException {
Message mes = decoder.decode(message);
logger.info("{} just send {}", mes.getAuthor(), mes.getMessage());
response.write(encoder.encode(mes));
}
Я использую Атмосфера версии 2.3.1. К сожалению, мне нужен длительный опрос, потому что там Weblogic 10.3.6. установленный на нашем производственном сервере и не поддерживает Websocket и имеет реализацию Servlet 2.5. только.
Edit:
Похоже, что во время первого запроса GET на сервер, сервер установит UUID для данного AtmosphereRequest и возвращает его на сервер с заголовком HTTP
X-Atmosphere-tracking-id = someUUID
, но в последующих рекомендациях клиент не использует его. Он посылает на сервер
X-атмосфера-отслеживания идентификатор = 10000
Не уверен, если это правильно ...