|
Android Разработка игр на платформе Android |
22.03.2015, 13:02
|
#1
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Соединение типа "клиент(android) <=> Сервер(php)"
Добрый день, Булка!
Пишу тут чатик простейший (аля аська, только без заморочек: 2 статуса - онлайн и оффлайн, инфа о пользователе, передача сообщений), учусь программировать под андрюшу. Свободно получилось сделать регистрацию, авторизацию, запрос всяких списков из базы данных (групп, поиска пользователей, имеющихся контактов, сообщений и т.п.). И вот я подошёл к главному моменту данного изучения - передача сообщений.
И, собственно, у меня возник вопрос - а как это делается? Передать сообщений на сервер - проще простого. А вот как серверу отдать сообщение нужному клиенту? В базе данных храню последний использованный ip и порт пользователя. Конечно можно сделать довольно просто - пусть клиент сам обновляет свои сообщения когда ему нужно. Но это ведь плохой способ, все нормальные чатики онлайн отдают пользователю пришедшие сообщения. Принцип я понимаю как то так:
1) на сервер пришло сообщение от пользователя A, предназначенное пользователю B;
2) сервер смотрит адрес пользователя B в базе;
3) сервер стучится по найденному адресу (что то типа ping) что бы убедиться в его валидности;
4) если нужный ответ получен - отправляем по данному адресу сообщение и ждём уведомление о принятии сообщения клиентом B;
5) отправляем клиенту A уведомление что сообщение доставлено (опционально).
Хотя можно и проще - на клиенте раз в какое то время (раз в N-секунд) спрашивать список сообщений (ну или проверять флаг новых сообщений, если его сделать). Но это помоему лишняя нагрузка на сервак, да и с нашими уровнями сотовых сигналов - приложение само опухнет от своих же запросов.
Подскажите пожалуйста знающие люди, хотя бы куда и в какую сторону копать.
Сервер на голом PHP, база пока что MySQL (потом будет скорее всего Firebird, полюбилась она мне что то). Клиент на андроиде (пишу в Android Studio 1.1.0) отправляет запросы на сервер в через DefaultHttpClient методом HttpPost, сервер отвечает JSON'ном на любой чих клиента в его сторону.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
22.03.2015, 13:20
|
#2
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
На PHP только по запросам от клиента, или AJAX какой-нибудь юзать. Стучаться по адресу - у всех мобильников динамический адрес, смысла нет. Лучше написать свой сервер с постоянным коннектом.
Клиент запрашивающий считанные байты - не опухнет, даже по GPRS.
moka бы сказал что лучше серверную часть на node.js+mongodb
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.03.2015, 13:25
|
#3
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Сообщение от DStalk
у всех мобильников динамический адрес, смысла нет
|
Есть мнение что один ip адрес и порт держится на протяжении одного коннекта (то есть до потери связи ил иотключения от интернета). Разве не так?
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
22.03.2015, 13:26
|
#4
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Сообщение от St_AnGer
Есть мнение что один ip адрес и порт держится на протяжении одного коннекта (то есть до потери связи ил иотключения от интернета). Разве не так?
|
Так, но этот адрес не принадлежит мобильнику, и скрыт за NAT`ом (может быть куча клиентов под одним адресом) - до мобильника запрос не дойдет.
|
(Offline)
|
|
22.03.2015, 13:30
|
#5
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Сообщение от DStalk
Так, но этот адрес не принадлежит мобильнику, и скрыт за NAT`ом (может быть куча клиентов под одним адресом) - до мобильника запрос не дойдет.
|
Да, это знаю. Именно по этому тред и создал. Я просто не очень понимаю как работают другие чаты (та же аська). Неужели очень часто запрашивают состояние у сервера?
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
22.03.2015, 13:51
|
#6
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Сообщение от DStalk
Так, но этот адрес не принадлежит мобильнику, и скрыт за NAT`ом (может быть куча клиентов под одним адресом) - до мобильника запрос не дойдет.
|
Вообще-то если коннект установлен, похрену нат или не нат, всё дойдёт куда надо.
Вся фигня с NAT'ом в том что нельзя приконнектится из вне, но если коннект есть, то уже пофиг.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
22.03.2015, 14:35
|
#7
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Сообщение от SBJoker
Вообще-то если коннект установлен, похрену нат или не нат, всё дойдёт куда надо.
Вся фигня с NAT'ом в том что нельзя приконнектится из вне, но если коннект есть, то уже пофиг.
|
Ну я собсно про это и говорю. Только в случае с PHP как раз надо коннектиться к клиенту.
Сообщение от St_AnGer
Да, это знаю. Именно по этому тред и создал. Я просто не очень понимаю как работают другие чаты (та же аська). Неужели очень часто запрашивают состояние у сервера?
|
Я так думаю держат постоянный коннект.
|
(Offline)
|
|
22.03.2015, 15:45
|
#8
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Теоретически, можно сделать два сокета от клиента к серверу и клиент в один будет писать и получать обычные запросы, а из другого - читать о внезапных появлениях новых сообщений. Читающий поток на клиенте будет блокироваться, пока чего-нибудь не получит.
Но я хз, насколько это адекватный способ. Мне почему-то кажется, что в один сокет не стоит одновременно пихать данные с двух сторон и пытаться их потом читать. Но ты попробуй, вдруг получится.
P.S. К слову, если писать сервер на java, то можно юзать встроенную в язык сериализацию и без проблем передавать объекты туда-сюда.
UPD: вот тут пишут, что вроде одного хватит
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.03.2015, 15:58
|
#9
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Long polling, например - http://habrahabr.ru/post/128535/
Всякие вконтакты юзают, например. Телеграмм тоже. Ну и еще овер9000 мессенджеров. Патаму шо просто и можно сделать на похапе даже труъ индусу. И всякие NAT не страшны.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
|
24.03.2015, 12:52
|
#10
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"
Сообщение от Knightmare
Long polling, например - http://habrahabr.ru/post/128535/
Всякие вконтакты юзают, например. Телеграмм тоже. Ну и еще овер9000 мессенджеров. Патаму шо просто и можно сделать на похапе даже труъ индусу. И всякие NAT не страшны.
|
Потыкался, попробовал, это именно то что нужно. Спасибо!
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:24.
|