Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Добрый день!

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

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

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

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

Заранее большое спасибо!
Андрей! вне форума Ответить с цитированием
Старый 12.09.2016, 15:52   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем усложнять себе жизнь? Берите Tomcat и смотрите например на сервлеты. Ну или на фреймворк типа Spring MVC.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.09.2016, 16:13   #3
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

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

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

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

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

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

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

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

Был бы благодарен хотя бы за пример на псевдокоде, потому что с Java я совсем не дружу!
Андрей! вне форума Ответить с цитированием
Старый 12.09.2016, 17:09   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

А вообще вместо "ждёт запроса" можно что-то более продвинутое использовать типа вебсокетов. Ну или просто 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 естественно есть другие варианты, например сохранять его в сессию в запросе авторизации)

Про сервлеты не помню что там и как, они низкоуровневее, так что если сокеты нравятся, то может быть будет проще.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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