Cometd на Tomcat

Я пытаюсь развернуть cometd (3.0.1) на tomcat (7.0.50). Раньше я использовал cometd (3.0.1) с причалом 9.2.2.

Я вижу, что cometd зависит от некоторой библиотеки причалов, как указано здесь, но что это зависимости?

Кроме того, я следил за этой публикацией и был сбит с толку "одновременным асинхронно пишет".

Говорят, что «CometD 3 был модифицирован, чтобы избежать одновременных асинхронных операций записи, которые разрешены спецификацией, но которые Tomcat отклоняет».

Означает ли это что-то, связанное с этим «истинным». Должен ли я сделать это ложным? Cometd Часто задаваемые вопросы

Кто-нибудь может помочь?

Спасибо

EDIT
С причалом я использую следующие банки. Какие из них я могу удалить, если я использую tomcat.

jetty-client.jar,
jetty-continuation.jar,
jetty-http.jar,
jetty-io.jar,
jetty-jmx.jar,
jetty-security.jar,
jetty-servlet.jar,
jetty-servlets.jar,
jetty-server.jar,
jetty-util.jar,
jetty-util-ajax.jar,
jetty-webapp.jar,
jetty-deploy.jar,
jetty-xml.jar,
jetty-annotations.jar

person learner    schedule 16.04.2015    source источник


Ответы (1)


CometD 3 полностью переносим между контейнерами сервлетов, поэтому он будет работать как в Tomcat, так и в Jetty, по модулю ошибок в любом контейнере.

Библиотеки Jetty, от которых зависит CometD, также полностью переносимы (это просто служебные библиотеки). Точные зависимости зависят от того, какую функцию CometD вы хотите. Минимальный набор это:

  • jetty-util
  • jetty-util-ajax

Однако настоятельно рекомендуется использовать инструмент зависимостей, такой как Maven, и забыть о ручном удовлетворении зависимостей для вашего проекта.

CometD предоставляет учебник и tutorials, чтобы вы могли начать.

Стандарт JSR 356 WebSocket предоставляет способ отправки сообщений WebSocket с помощью асинхронные API.

В то время как реализация Jetty JSR 356 позволяет одновременно использовать эти API, реализация Tomcat не позволяет. Поскольку параллельное использование этих API-интерфейсов распространено в CometD, оказалось, что CometD нормально работает в Jetty, но не в Tomcat. Поэтому CometD был изменен, чтобы избежать одновременных операций записи ради переносимости между контейнерами, поскольку спецификация JSR 356 была слишком расплывчатой ​​в отношении точной семантики API.

ОБНОВЛЕНИЕ. Существует два способа одновременного использования API-интерфейсов WebSocket.

Во-первых, реализация WebSocket заботится о параллелизме; такие приложения, как CometD, могут одновременно вызывать API-интерфейсы WebSocket, а внутри реализация имеет synchronized блоков, или очередь, или любое другое решение, применяемое для обеспечения того, чтобы сообщения не были повреждены. Два потока смогут одновременно вызывать API-интерфейсы WebSocket, но в конечном итоге обработка сообщений будет сериализована, и сообщения будут отправляться одно за другим.

Во-вторых, приложение (CometD) позаботится о параллелизме и применит synchronized блоков или постановку в очередь и т. д. перед вызовом API-интерфейсов WebSocket.

Jetty реализовал первое решение, Tomcat — нет. Из-за этого CometD был модифицирован для реализации второго решения.

Это означает, что вы можете использовать API CometD одновременно (что в конечном итоге приведет к вызову API WebSocket), не беспокоясь, потому что CometD должным образом заботится о параллелизме, чтобы быть переносимым между контейнерами сервлетов и их реализациями WebSocket.

Асинхронные записи WebSocket не имеют ничего общего с <async-supported> в web.xml, которые вы все равно должны были включить, как указано в документация.

person sbordet    schedule 16.04.2015
comment
Спасибо, что поделились этой информацией. Просто для понимания перспективы, есть ли способ использовать одновременную запись с кометдом, скажем, на причале с версией 3.0.1, или его полностью избегают? - person learner; 16.04.2015
comment
Я отредактировал ответ, разъяснив использование одновременных операций записи. - person sbordet; 16.04.2015
comment
раньше я включал servlet-api.jar из причала, теперь я должен включить jar, специфичный для tomcat, или j2ee servlet-api.jar также будет работать? - person learner; 17.04.2015
comment
Вы никогда не должны включать jar-файлы Servlet или JEE API в свои приложения, они предоставляются контейнером. - person sbordet; 17.04.2015
comment
Я не уверен, но мне нужен jetty-jmx.jar,jetty-servlet.jar,jetty-servlets.jar,jetty-server.jar,jetty-deploy.jar,jetty-xml.jar,jetty-annotations.jar - person learner; 20.04.2015
comment
Как я уже сказал, чтобы точно сказать, что вам нужно, вы должны сказать, какие функции CometD вы используете. Используйте инструмент зависимостей, такой как Maven, и позвольте ему решить, какие зависимости вам нужны, и все ваши проблемы исчезнут. - person sbordet; 20.04.2015