Я развертываю свое веб-приложение на Apache Tomcat 8.5 (и Glassfish 4.1) с аннотированной конечной точкой веб-сокета.Мне нужно знать, как аннотированные методы onOpen()
, onClose()
, onMessage()
, onError()
ведут себя с точки зрения параллелизма:
- Можно ли вызывать
onOpen()
, пока метод onOpen()
еще не завершил выполнение? - Можно ли вызвать
onClose()
, пока метод onClose()
еще не завершил выполнение? - Можно ли вызвать
onMessage()
, пока метод onMessage()
* еще не завершил выполнение? - Можно ли вызвать
onError()
, пока метод onError()
еще не завершил выполнение? - Может ли любой метод
onOpen()
, onClose()
, onMessage()
, onError()
вызывается, в то время как любой другой метод onOpen()
, onClose()
, onMessage()
, onError()
еще не завершил выполнение?
И немного более ограниченная ситуация: как насчетвыше пяти перечисленных вопросов, если мы просто поговорим об одном и том же объекте session
, то есть можно ли вызывать on
-метод с конкретным экземпляром session
, в то время как уже существует вызов активного * on
-методас тем же session
экземпляром?
Предполагается, что несколько насПараллельно подключаются, отключаются, связываются или закрывают соединение через веб-сокет.Кроме того, никакие механизмы ручной блокировки, такие как synchronized
, не используются дополнительно.
- Какой метод может быть "прерван" каким методом?
- Что, если несколько
onOpen()
, onClose()
, onMessage()
, onError()
события ожидают?Будет ли это блокировать другие методы?
Далее я предоставил фрагмент кода:
@ServerEndpoint
public class WebsocketServer
{
@OnOpen
public void onOpen(Session session)
{
// ...
}
@OnMessage
public void onMessage(Session session, String message)
{
// ...
}
@OnMessage
public void onMessage(Session session, PongMessage pongMessage)
{
// ...
}
@OnError
public void onError(Throwable error)
{
// ...
}
@OnClose
public void onClose(Session session)
{
// ...
}
}
Пожалуйста, не стесняйтесь сообщить мне дополнительную информацию об этой теме параллелизма втермины веб-сокетов.
Я мог бы заметить, что, если многие пользователи запускают метод onOpen()
, подключаясь к серверу, тогда другой пользователь, который отправляет сообщение веб-сокета и запускает метод onMessage()
, обрабатывается, когда всеonOpen()
вызовы завершены.
Дополнительное чтение: