Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
verylazy
Заблокирован
#1

клиент-сервер - Программирование Android

21.10.2013, 13:24. Просмотров 2514. Ответов 8
Метки нет (Все метки)

Dear All.
Я потихоньку изучаю программирование под андроид и вот пришло время думать над такой задачей - а как вообще организовывается клиент-сервер на андроиде? Сейчас я попытаюсь уточнить, что именно мне непонятно.

Вот у нас есть мобильный пользователь, у которого установлено приложение. Человек в нем набирает в EditText сообщение или нажимает кнопочку и это сообщение или картинка или любой другой файл отправляются куда-то в интернет. Где-то в интернете поднят сервер, подключившись к которому с клиентского приложения можно принимать-отправлять файлы, делать запросы к базе данных, получать результат, который показывать в окне мобильного приложения.
И вот что мне непонятно - что должно быть и как организованно на стороне сервера?
Я понимаю, что необходимо поднять какой-то веб-сервер, поднять sql. Мне не хватает ума понять как программа будет работать с базой через этот веб сервер. Там, на стороне сервера должна быть запущена серверная часть или написана какая-то html страничка? Я просто с этим никогда не сталкивался вообще Я работал по отдельности с sql, понимаю, что такое tcp, udp, маршрутизация, то есть немного не тот уровень абстракции.

И еще вопрос вдогонку - правильно ли мне кажется, что правильнее (безопаснее) все таки сделать "прослойку" в виде веб сервера между клиентов и базой, а не работать "напрямую" через порты с какой-то серверной частью?

Кому-то, наверное, все написанное покажется бредом. Пусть так, но я для того и написал, что бы понять.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2013, 13:24     клиент-сервер
Посмотрите здесь:

Сервер и клиент - Программирование Android
Хочу написать простенький сервер, который передает с клиента, то есть с телефона, сообщение по нажатию на кнопку. Передает на сервер,...

клиент-сервер - Программирование Android
Всем привет, помогите,пжлста, разобраться. Пытаюсь сделать простое клиент-сервер соединение (удп). Сервер запускается, но когда запускаю...

Клиент и сервер - Программирование Android
У меня есть TCP клиент андроид и сервер Qt. На сервер все данные нормально приходят но на клиент ответ от сервера(текстовое сообщение) не...

Клиент-сервер - Программирование Android
Здравствуйте. Возникло желание создать клиент (андоид) / сервер на ПК (java). Принцип работы клиент сервера: 1. На сервере добавляю...

Клиент-Сервер - Программирование Android
Во вложении фото моей активности. На ней отображается мое местоположение в виде маркера. Как мне отобразить местоположение другого...

Клиент - сервер протокол - Программирование Android
Всем привет. Я пытаюсь понять как и с помощью чего можно организовать клиент-серверное приложение. Гуглю вторую неделю, перечитал кучу...

Клиент-сервер. Базы - Программирование Android
Здравствуйте. Поясните(нкаидайте ссылкон на инфу), пожалуйста, как организовать клиент-сервер на Android? Как передавать данные в базу и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
21.10.2013, 14:09     клиент-сервер #2
verylazy, всё предельно понятно. Я уже рассказывал, как это организовывать. Добавлю немного о сервере. Это может быть обычный PHP+MySQL или любой другой, с каким есть опыт. Его главная задача - хранить данные и предоставлять API для доступа к ним. Думаю, лучше это всё объяснить на примере.
Допустим, у нас есть простой клиент для переписки с разными пользователями (чат или подобие WhatsApp'а). На сервере будет две таблицы - пользователи и сообщения. И несколько функций API - авторизация, получение списка контактов, отправить сообщение и получить сообщения (здесь можно смотреть шире: получить сообщения от конкретного пользователя, все последние или начиная с прошлой недели; всё зависит от функционала). Никаких html, достаточно одного файла api.php. Клиент генерирует запрос на отправку сообщения (это json, в котором есть id пользователя и само сообщение). Сервер сохраняет сообщение в базу и отправляет результат клиенту. Например так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if (isset($_POST["idUser"]) && isset($_POST["text"])) {
    $result = mysql_query("INSERT INTO messages (id_user,date,text) VALUES( '".$_POST['idUser']."', NOW(), '".$_POST['text']."');");
    
    if ($result) {
        echo json_encode(array(
            "error" => "",
            "result" => true
        ));
    } else {
        echo json_encode(array(
            "error" => "DB error",
            "result" => false
        ));
 
    }
 
} else {
 
    echo json_encode(array(
        "error" => "Data incorrect",
        "result" => false
    ));
 
}
Чтобы получить сообщения есть несколько способов, но самый простой из них - создать сервис, который раз в N секунд будет опрашивать сервер на предмет новых сообщений. Сервер в свою очередь выбирает последние сообщения и отправляет клиенту. Далее функциональность сервера возрастает пропорционально запросам клиента. Если вам могут помочь какие-то конкретные приёмы, наработки, snippet'ы кода и пр. могу поделится в личке.

И о вопросе вдогонку: я не сторонник использовать драйвера для прямых sql запросов. Хлопотно это. Да и с развитием функциональности одной базой дело может не ограничится. Посему лучший вариант - это прослойка в виде скриптов, которую проще понять, организовать и сопровождать.
verylazy
Заблокирован
21.10.2013, 14:19  [ТС]     клиент-сервер #3
Спасибо за ответ.
Скажу честно, я мало что понял пока что. Для меня все то, что крутится на веб сервере, включая всякие php это писец полный и китайская грамота.
На этом абзаце я тухну полностью
несколько функций API - авторизация, получение списка контактов, отправить сообщение и получить сообщения. Никаких html, достаточно одного файла api.php. Клиент генерирует запрос на отправку сообщения (это json, в котором есть id пользователя и само сообщение). Сервер сохраняет сообщение в базу и отправляет результат клиенту.
Правильно я понимаю, что API для доступа к базе это набор методов, которые реализованы, например, на php ? Что бы напрямую через интернет не сделать запрос к БД, мы вызываем метод из этого php файла, который запущен на веб сервере?
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
21.10.2013, 14:56     клиент-сервер #4
verylazy, да, вы всё правильно понимаете.

Не по теме:

Можно это представить так:
пользователь отправляет новое сообщение
android: поле текст пустое, ламер, введи нормальное сообщение.
пользователь отправляет новое сообщение
android: о, валидацию прошли. ProgressBar запущен. Итак, у меня новые данные, есть сообщение для пользователя J. Сервер, вот id и text, приём.
php: Timeout Error
android: что за ..., бухать на рабочем месте! Ладно, дубль два: те же данные, приём.
php: о, новое сообщение. Надо бы в таблицу занести. SQL, я создал новый INSERT запрос, обработай.
sql: что-то пошло не так.
php: плохо, данные не сохранились, так и запишем, запрос не обработан, sql тупит, я не причём.
android: да что за день сегодня, клиент нервничает, сообщение нужно любимой отправить, пока не любимая в ванной. Дубль три, принимай давай.
php: о, ещё одно сообщение. SQL, новый INSERT, работаем.
sql: данные успешно сохранены.
php: отлично, так и запишем, данные добавлены ошибок нет, я молодец. Клиент, получите и распишитесь.
android: зашибись, ProgressBar убрал, сейчас покажу Toast пользователю, что всё хорошо, а то так и по дисплею получить не долго..
android: "Ваше сообщение успешно отправлено"

verylazy
Заблокирован
21.10.2013, 15:03  [ТС]     клиент-сервер #5
Черт побери, мне теперь нужно не просто тщательно продумать API для моего приложения, а еще и научиться писать на php, жестоко однако.
Спасибо за пояснения, я наверняка еще напишу в эту тему когда немного осмыслю полученную информацию
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.10.2013, 03:04     клиент-сервер #6
Цитата Сообщение от verylazy Посмотреть сообщение
а еще и научиться писать на php
зачем же?
http://tutorials.jenkov.com/java-servlets/index.html
MbICJIuTeJIb_u3
KeM6Pug}I{a
49 / 49 / 2
Регистрация: 23.08.2013
Сообщений: 202
23.10.2013, 19:28     клиент-сервер #7
Цитата Сообщение от Wenceslaus Посмотреть сообщение
Чтобы получить сообщения есть несколько способов, но самый простой из них - создать сервис, который раз в N секунд будет опрашивать сервер на предмет новых сообщений
Я не разу не работал с андроидом и если я не прав то поправьте , но зачем опрашивать сервер на предмет новых сообщений если сервер сам может нам сообщить что пришли новый сообщения , на то он и сервер ?

И тем более не какого php тут не надо если знаешь java)

Могу предложить такую архитектуру сервера:

Создаем абстракцию для клиентских запросов а так же для серверных. Это обеспечит хорошую расширяемость.
Пишем свой хандлер для запросов, запросы типа : хейдер пакета : id пакета : тело пакета.
Пишем сетевое ядро на Selectore (можно использовать всякие Netty)
И просто обрабатываем пакета от клиента , при том пакеты могут быть разные и вообще не зависть друг от друга .
Будь это пакет простого текстового сообщения , или же передача файла , или подключение видео чата.

PS Прошу тока сразу тапочками не бросаться )
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
23.10.2013, 20:52     клиент-сервер #8
MbICJIuTeJIb_u3, всё верно вы говорите. Вопрос в другом, сможет ли автор в один присест разобраться с socket-соединениями, пакетами данных и сетевым ядром на Selectore? Учитывая то, что с написанием серверной части не сталкивался вообще? И более того, если я правильно понял автора, в его цели не входит пересылка мгновенных сообщений (это я взял только как пример для наглядности, и, возможно, плохой пример). Посему в данном случае можно спокойно обойтись простым REST API и не брать в голову лишнего..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 22:44     клиент-сервер
Еще ссылки по теме:

Клиент-сервер (сокеты) - Программирование Android
Пытаюсь написать два приложения: первое запускается на ПК (написано на JAVA и оно же сервер), второе на Android (оно же клиент). Клиент...

Клиент-сервер (сокеты) - Программирование Android
Хочу тестировать клиент-серверное приложение на базе слкетов, но не знаю какой IP нужно указывать в клиентском приложении, которое потом...

Не работает связь сервер/клиент - Программирование Android
Привет всем народ =) Сделал прогу на java сервер и клиент, они работают, всё нормально запускается через командную строку клиент...

клиент-сервер (телефон+планшет) - Программирование Android
можно создать двохсторонний сервер для телефона и планшета? нужно выполнять запросы на телефоне и планшете... нужно получить...

Реализация Клиент(Телефон) - Сервер(ПК) на Android - Программирование Android
Здравствуйте. Интересует информация по теме: клиент-сервер на Андройд. Для начала, хотелось бы "подружить телефон и ПК", тем самым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
verylazy
Заблокирован
23.10.2013, 22:44  [ТС]     клиент-сервер #9
Точно так, не сталкивался и не мгновенные сообщения. Читал эти дни не переставая, не скажу что много понял.
Решил не форсировать события и как пойдет - так пойдет. Скачал и поставил Eclipse JavaEE и там пытаюсь понять что откуда торчит и зачем оно вообще. Пока что смог запустить Tomcat, он работает и виден дефолтный сайт. Теперь, я так понимаю, необходимо понять как туда приклеить сервлет.
Наличие работающего http сервера прямо под эклипсом немного сбивает с толку, как-то неожиданно. До этого я настраивал только IIS...ну как настраивал...инсталлировал

Мое приложение это просто фантазия, выдуманный функционал что бы ручки запоминали.
Но если конкретнее то я так понял (если правильно понял) мне надо написать сервлет, который будет реагировать на запросы POST/GET которые вызывают соответствующие методы в экземпляре класса сервлета.

Насколько я понимаю, если делать все через сокеты то к моему сайту будет проблематично подключаться обычным браузером? А если все делать через по такой цепочке
клиент - веб сервер - сервлет - база
то можно будет и страничку нарисовать, которая будет отображать как мне хочется и мобильный клиент будет работать как будто он тоже браузер.
В общем в голове понимание кое какое есть, а словами как-то запутанно получается.
Yandex
Объявления
23.10.2013, 22:44     клиент-сервер
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru