Показать сообщение отдельно
Старый 22.03.2015, 13:02   #1
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 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)
 
Ответить с цитированием