Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > Android

Android Разработка игр на платформе Android

Ответ
 
Опции темы
Старый 22.03.2015, 10:02   #1
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,001
Написано 1,141 полезных сообщений
(для 2,752 пользователей)
Соединение типа "клиент(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, 10:20   #2
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 26.06.2009
Адрес: Рязань-Москва
Сообщений: 458
Написано 389 полезных сообщений
(для 1,040 пользователей)
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"

На PHP только по запросам от клиента, или AJAX какой-нибудь юзать. Стучаться по адресу - у всех мобильников динамический адрес, смысла нет. Лучше написать свой сервер с постоянным коннектом.
Клиент запрашивающий считанные байты - не опухнет, даже по GPRS.

moka бы сказал что лучше серверную часть на node.js+mongodb
__________________
galaxies.su | dstalk.ru
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (22.03.2015)
Старый 22.03.2015, 10:25   #3
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,001
Написано 1,141 полезных сообщений
(для 2,752 пользователей)
Ответ: Соединение типа "клиент(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, 10:26   #4
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 26.06.2009
Адрес: Рязань-Москва
Сообщений: 458
Написано 389 полезных сообщений
(для 1,040 пользователей)
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"

Сообщение от St_AnGer Посмотреть сообщение
Есть мнение что один ip адрес и порт держится на протяжении одного коннекта (то есть до потери связи ил иотключения от интернета). Разве не так?
Так, но этот адрес не принадлежит мобильнику, и скрыт за NAT`ом (может быть куча клиентов под одним адресом) - до мобильника запрос не дойдет.
__________________
galaxies.su | dstalk.ru
(Offline)
 
Ответить с цитированием
Старый 22.03.2015, 10:30   #5
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,001
Написано 1,141 полезных сообщений
(для 2,752 пользователей)
Ответ: Соединение типа "клиент(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, 10:51   #6
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,910
Написано 3,395 полезных сообщений
(для 9,285 пользователей)
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"

Сообщение от DStalk Посмотреть сообщение
Так, но этот адрес не принадлежит мобильнику, и скрыт за NAT`ом (может быть куча клиентов под одним адресом) - до мобильника запрос не дойдет.
Вообще-то если коннект установлен, похрену нат или не нат, всё дойдёт куда надо.
Вся фигня с NAT'ом в том что нельзя приконнектится из вне, но если коннект есть, то уже пофиг.
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
Nex (22.03.2015), St_AnGer (22.03.2015)
Старый 22.03.2015, 11:35   #7
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 26.06.2009
Адрес: Рязань-Москва
Сообщений: 458
Написано 389 полезных сообщений
(для 1,040 пользователей)
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"

Сообщение от SBJoker Посмотреть сообщение
Вообще-то если коннект установлен, похрену нат или не нат, всё дойдёт куда надо.
Вся фигня с NAT'ом в том что нельзя приконнектится из вне, но если коннект есть, то уже пофиг.
Ну я собсно про это и говорю. Только в случае с PHP как раз надо коннектиться к клиенту.

Сообщение от St_AnGer Посмотреть сообщение
Да, это знаю. Именно по этому тред и создал. Я просто не очень понимаю как работают другие чаты (та же аська). Неужели очень часто запрашивают состояние у сервера?
Я так думаю держат постоянный коннект.
__________________
galaxies.su | dstalk.ru
(Offline)
 
Ответить с цитированием
Старый 22.03.2015, 12:45   #8
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"

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

P.S. К слову, если писать сервер на java, то можно юзать встроенную в язык сериализацию и без проблем передавать объекты туда-сюда.

UPD: вот тут пишут, что вроде одного хватит
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (22.03.2015)
Старый 22.03.2015, 12:58   #9
Knightmare
Дэвелопер
 
Регистрация: 13.02.2007
Сообщений: 1,452
Написано 808 полезных сообщений
(для 2,869 пользователей)
Ответ: Соединение типа "клиент(android) <=> Сервер(php)"

Long polling, например - http://habrahabr.ru/post/128535/
Всякие вконтакты юзают, например. Телеграмм тоже. Ну и еще овер9000 мессенджеров. Патаму шо просто и можно сделать на похапе даже труъ индусу. И всякие NAT не страшны.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
Randomize (22.03.2015), St_AnGer (22.03.2015)
Старый 24.03.2015, 09:52   #10
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,001
Написано 1,141 полезных сообщений
(для 2,752 пользователей)
Ответ: Соединение типа "клиент(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)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +1, время: 07:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com