Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC)
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 12.09.2016, 16:42   #1
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
Репутация: 10
Вопрос Реализация сервера (чат)

Добрый день!

Волею судьбы так сложилось что мне необходимо реализовать клиент-серверное приложение (чат, с возможностью передачи изображений) на языке Java (клиент должен быть под android).

В целом проблем с логикой написания клиента - не возникло. Возникли проблемы при написании серверной части.
По условию протокол обмена данными между клиентом/сервером - http.

Я имел опыт реализации подобной программы на C++, но там я использовал сокеты (socket) но они по модели OSI относятся к транспортному уровню, а не прикладному, как http.
Честно говоря опыта в сетевом программировании у меня не особо много - поэтому, собственно и хотел получить советы:

1) Если я реализую данную программу с помощью сокетов - нарушу ли я условия задачи?
2) Если является возможным реализовать данную систему (клиент/сервер) ТОЛЬКО с использованием http запросов? (буду благодарен статьям/примерам)

Заранее большое спасибо!
Андрей! вне форума   Ответить с цитированием
Старый 12.09.2016, 16:52   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 11,580
Репутация: 2366

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Зачем усложнять себе жизнь? Берите Tomcat и смотрите например на сервлеты. Ну или на фреймворк типа Spring MVC.
Alex11223 на форуме   Ответить с цитированием
Старый 12.09.2016, 17:13   #3
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем усложнять себе жизнь? Берите Tomcat и смотрите например на сервлеты. Ну или на фреймворк типа Spring MVC.
Спасибо вам за наводку, буду читать в этом направлении!

Если у Вас есть возможность был бы благодарен самому простому примеру, как можно отправить сообщение (текст) на сервер, а с сервера другому клиенту (реализация чата из 2 собеседников).

Если я правильно понимаю то порядок действий должен быть примерно такой:

Собеседник 1 - С1
Собеседник 2 - С2
Сервер - С

1. С1 - посылает запрос на С с атрибутом, допустим message="Test123"
2. С - сохраняет данное сообщение, ждёт запроса от С2 на обновление
3. С2 - запрашивает новые сообщения у С, С - высылает все сообщения, полученные от С1, после определённого времени (запрашиваемого)

Но вот если честно пока что нет четкого представления как именно реализовать такую систему запросов.

Особенно больше всего интересует просто передача текстовых данных с/на сервер, а со всем остальным разберусь.

Был бы благодарен хотя бы за пример на псевдокоде, потому что с Java я совсем не дружу!
Андрей! вне форума   Ответить с цитированием
Старый 12.09.2016, 18:09   #4
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 11,580
Репутация: 2366

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Да, наверно можно и так если задача учебная.

А вообще вместо "ждёт запроса" можно что-то более продвинутое использовать типа вебсокетов. Ну или просто long polling.

Еще непонятно общаются ли они только друг с другом (С1 с С2, С3 с С4) или общий чат для всех (как IRC, форум и т.п.)

А что тут псевдокодить? Надо ж просто с синтаксисом разобраться если понятно как HTTP работает, ну и продумать до конца схему работы (как идентифицировать пользователей, авторизация если нужна, формат ответов сервера и т.п.).

В Spring MVC будет что-то типа такого класса (+немного конфигурации, туториалов полно):
Код:

@Controller
public class MessageController {

    @RequestMapping(value = "/add_message", method = RequestMethod.POST)
    public @ResponseBody String addMessage(@RequestParam("message") String message, @RequestParam("username") String user) {
        if (message некорректен, пустой, ..., user некорректен, ...) {
            return "error";
        }
        
        добавить message в БД;
        
        return "ok";
    }

    @RequestMapping(value = "/get_messages", method = RequestMethod.GET)
    public @ResponseBody String getMessages(@RequestParam("since") String sinceDate) {
        return получить из БД сообщения начиная с sinceDate и вернуть в любом удобном виде 
                  (например JSON);
    }
}

И клиент просто отправляет POST /add_message (с параметрами message и username), GET /get_messages?since=датавремя и т.п. (вместо username естественно есть другие варианты, например сохранять его в сессию в запросе авторизации)

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

Последний раз редактировалось Alex11223; 12.09.2016 в 18:18.
Alex11223 на форуме   Ответить с цитированием
Старый 14.09.2016, 05:18   #5
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
Репутация: 10
По умолчанию

Большое спасибо Вам за советы/подсказки!

Ну и уточнение, чат работает таким образом - случайным образом (по нажатию кнопки) ищется собеседник, т.е (С1-С2, С3-С4).
Я не знаю можно ли это писать, но примерно копия чата , где только клиентом выступает телефон на android, а сервер - приложение Java.

До 15.09 обязательно реализую данную систему, и поделюсь исходным кодом сервера/клиента, если кому-то это поможет!

Последний раз редактировалось Андрей!; 14.09.2016 в 05:21.
Андрей! вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чат бот, знакомства и чат с людьми Corp Gamedev - cоздание и обсуждение игр 0 17.06.2016 16:13
Реализация TCP+SSL клиент-сервера через Synapse 3D Hunter Работа с сетью в Delphi 19 06.09.2013 08:08
Реализация веб-сервера сбора и обработки данных radiosfera Проектирование web интерфейсов, приложений, базы данных 0 25.03.2013 10:55
Чат f3arnil Фриланс 5 22.01.2013 18:01
Реализация icq сервера... olegteror Работа с сетью в Delphi 4 11.01.2010 19:21




15:13.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru