Параллельная работа с Tomcat (и Glassfish) с использованием конечной точки веб-сокета с несколькими соединениями веб-сокетов - PullRequest
0 голосов
/ 28 марта 2019

Я развертываю свое веб-приложение на 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() вызовы завершены.

Дополнительное чтение:

...