Реализация сервера чата как WebService

Нет, проблем не будет, если вы выполните следующее:

  1. Поместите ваши данные в HashMap при первой загрузке одного потока, прежде чем произойдет какая-либо многопоточность. Это связано с тем, что процесс добавления данных изменяет значение modcount и отличается при первом добавлении (возвращается ноль) и замене данных (старые данные будут возвращены, но modcount не будет изменен). Modcount - это то, что делает итераторы отказоустойчивыми. Однако если вы используете get, ничего не будет повторяться, так что все в порядке.

  2. Используйте одинаковые клавиши во всем приложении. Как только приложение запускается и загружает свои данные, никакие другие ключи не могут быть назначены этой карте. Таким образом, get либо получит устаревшие данные, либо данные, которые были вставлены свежими - проблем не будет.

6
задан inspectorG4dget 12 October 2012 в 16:57
поделиться

4 ответа

Насколько мне известно, чат-сервер должен знать своих клиентов после первоначального соединения и отправлять каждое клиентское сообщение всем клиентам. Это определенно требует какого-то обслуживания сеанса. Я думаю, что правильный способ сделать это:

  1. Клиент вызывает «рукопожатие» веб-службы и предоставляет некоторые минимальные идентификационные данные.
  2. Сервер возвращает подтверждение, которое включает уникальный идентификатор клиента.
  3. Клиент вызывает веб-службу. 'message' и отправляет новое сообщение вместе со своим идентификатором.
  4. Сервер идентифицирует клиента по идентификатору, рассылает сообщение всем клиентам.

Я не совсем уверен, как должна работать рассылка сообщений, поскольку веб-службы по сути, это служба выталкивания, а не толчка. Возможно, клиенту следует открыть свою собственную веб-службу для вызова сервера.

6
ответ дан 17 December 2019 в 00:14
поделиться

Я не знаю Java, поэтому этот ответ не зависит от языка.

На мой взгляд, самый простой способ сделать это без запуска процесса на сервере - сохранить все ваши данные в базе данных.

Вот краткий список основных вещей, которые необходимо будет сделать:

  1. Нужна таблица со списком пользователей и паролей для аутентификации
  2. Нужна таблица для текущих пользователей, вошедших в систему
    A. требуется поле отметки времени последнего контакта
  3. Когда пользователь что-то делает, обновляет поле последнего контакта до текущего времени
  4. Если время последнего контакта пользователя> текущего времени + 2 минуты, то он выходит из системы
  5. Клиентское приложение должно будет отправлять на сервер периодические сообщения, чтобы сказать: «Я все еще здесь».
  6. Вам нужно будет найти способ определить, когда сообщение было отправлено и когда обновить отображение клиента, которое сообщение было получено, я оставлю его вам.

Если вам все еще нужна помощь, вот чат-приложение AJAX / ASP.Net, которое должно (я не смотрел на его источник) работать примерно так же.

0
ответ дан 17 December 2019 в 00:14
поделиться

Вы можете рассмотреть возможность реализации решения COMET . Это эффективно даст вам push-коммуникацию, тем самым устраняя задержку, что является ОЧЕНЬ хорошей функцией для приложения чата.

Если вы хотите получить золото, подумайте о внедрении более продвинутых функций:

  • проверка орфографии
  • URL-адреса / электронная почта адреса автоматически преобразуются в ссылки
  • отдельные комнаты чата
  • функции модератора (завершение чата, удаление пользователя)
  • информация о событиях, например «Пользователь вводит ...»
  • статусы (доступен, занят, нет на месте ... )
  • аватары
  • ...
1
ответ дан 17 December 2019 в 00:14
поделиться

Я написал движок чата, у которого была служба в фоновом режиме и все, что хранилось в базе данных, фрейм формы ввода и фрейм вывода, который получил поток HTML.

Если вы хотите пропустить служебную часть и реализовать только через веб-службу вам необходимо реализовать как минимум две операции: Post для входных данных и GetLatestChanges для получения выходных данных чата, которые переводятся в HTML с использованием некоторой магии Javascript.

Конечно, вам нужно отслеживать комнаты, пользователей, сообщения, какие тексты получает пользователь и т. д., как показано Unknwntech.

0
ответ дан 17 December 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: