Я внедряю сервис уведомлений, который уведомляет всех пользователей (с активными сеансами) о новых уведомлениях.Поскольку в этом веб-приложении используется Struts MVC (а не одностраничное приложение), использование веб-сокета представляется нецелесообразным, поскольку при каждой загрузке страницы требуется новое подключение WS.Вместо этого мой подход состоял в том, чтобы запускать Spring @Service каждую минуту, чтобы обновлять все сеансы активных пользователей с помощью «Unread_Notification_Count», чтобы каждая загрузка страницы могла просто проверять сеанс пользователя на это значение и соответствующим образом изменять отображение (исключая запрос к базе данных для каждогозагрузка страницы).
У меня есть 2 вопроса: 1) Является ли это лучшим подходом для решения этой проблемы, как я прочитал в документации Spring, что вам следует избегать непосредственного изменения пользовательских сессий.2) Если этот подход «хорошо», то как мне получить доступ к каждому сеансу пользователей, чтобы вставить / изменить значение «Unread_Notification_Count»?
@Service("notifySessionsService")
public class NotifySessionsServiceImpl implements NotifySessionsService {
@Autowired
private transient SessionRegistry sessionRegistry;
@Override
public void updateUnReadNotificationCount() {
for (Object principal : sessionRegistry.getAllPrincipals()) {
List<SessionInformation> sessionInformationList = sessionRegistry.getAllSessions(principal, false);
for (SessionInformation sessionInformation : sessionInformationList) {
System.out.println("Updating session for user: " + ((User)principal).getUsername() + ", sessionId: " + sessionInformation.getSessionId());
// [Get users notification count here]
// [Put in session, e.g. session.put("Unread_Notification_Count", count)]
}
}
}
public void setSessionRegistry(SessionRegistry sessionRegistry) {
this.sessionRegistry = sessionRegistry;
}
}