Spring WebFlux .doOnSubscribe и .doFinally. Возможно ли такое состояние гонки, если да, то как его исправить?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring WebFlux .doOnSubscribe и .doFinally. Возможно ли такое состояние гонки, если да, то как его исправить?

Сообщение Anonymous »

Я использую WebFlux Sinks для отправки событий SSE игрокам.
Когда игрок впервые получает соединение, вызывается .subscribe(Long playerId) и, следовательно, .configure(Subscription sub).
Вот мой фрагмент кода:

Код: Выделить всё

private static final ConcurrentHashMap SUBSCRIPTIONS = new ConcurrentHashMap();

public Flux> configure(Subscription sub) {
Sinks.Many> sink = Sinks.many().unicast().onBackpressureBuffer();

public Subscription(Long playerId) {
this.playerId = playerId;
}

@Override
public String toString() {
return String.format("%s for Player %s", id, playerId);
}
}
Предположим, клиент получает соединение, а затем мгновенно отключается.
  • В этом случае возможно ли, чтобы .doFinally каким-то образом выполнялся перед .doOnSubscribe? Если это возможно, то это создаст состояние гонки, где одним из результатов (нежелательного) будет экземпляр подписки, не удаляемый из ПОДПИСКИ.
  • Если это возможно, каковы мои подходы к исправлению?
P.S. Это не вопрос производительности (я знаю, даже если такой сценарий возможен, скорее всего, это будет происходить не слишком часто) - а чистое любопытство и самосовершенствование.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ossible-if
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»