Нет, проблем не будет, если вы выполните следующее:
Поместите ваши данные в HashMap при первой загрузке одного потока, прежде чем произойдет какая-либо многопоточность. Это связано с тем, что процесс добавления данных изменяет значение modcount и отличается при первом добавлении (возвращается ноль) и замене данных (старые данные будут возвращены, но modcount не будет изменен). Modcount - это то, что делает итераторы отказоустойчивыми. Однако если вы используете get, ничего не будет повторяться, так что все в порядке.
Используйте одинаковые клавиши во всем приложении. Как только приложение запускается и загружает свои данные, никакие другие ключи не могут быть назначены этой карте. Таким образом, get либо получит устаревшие данные, либо данные, которые были вставлены свежими - проблем не будет.
Насколько мне известно, чат-сервер должен знать своих клиентов после первоначального соединения и отправлять каждое клиентское сообщение всем клиентам. Это определенно требует какого-то обслуживания сеанса. Я думаю, что правильный способ сделать это:
Я не совсем уверен, как должна работать рассылка сообщений, поскольку веб-службы по сути, это служба выталкивания, а не толчка. Возможно, клиенту следует открыть свою собственную веб-службу для вызова сервера.
Я не знаю Java, поэтому этот ответ не зависит от языка.
На мой взгляд, самый простой способ сделать это без запуска процесса на сервере - сохранить все ваши данные в базе данных.
Вот краткий список основных вещей, которые необходимо будет сделать:
Если вам все еще нужна помощь, вот чат-приложение AJAX / ASP.Net, которое должно (я не смотрел на его источник) работать примерно так же.
Вы можете рассмотреть возможность реализации решения COMET . Это эффективно даст вам push-коммуникацию, тем самым устраняя задержку, что является ОЧЕНЬ хорошей функцией для приложения чата.
Если вы хотите получить золото, подумайте о внедрении более продвинутых функций:
Я написал движок чата, у которого была служба в фоновом режиме и все, что хранилось в базе данных, фрейм формы ввода и фрейм вывода, который получил поток HTML.
Если вы хотите пропустить служебную часть и реализовать только через веб-службу вам необходимо реализовать как минимум две операции: Post для входных данных и GetLatestChanges для получения выходных данных чата, которые переводятся в HTML с использованием некоторой магии Javascript.
Конечно, вам нужно отслеживать комнаты, пользователей, сообщения, какие тексты получает пользователь и т. д., как показано Unknwntech.