Я разрабатываю приложение типа текстового сообщения.Реализация технологии push-соединения с POST (HTTP) через постоянное соединение
Сообщения передаются только в направлении ((1) Сервер -> (п) Client)
- Сервер: PHP (LAMP)
- Клиенты: Android (Java)
Один из вариантов - запросить сервер каждые x секунд «новые сообщения?». Этот вариант не стоит меня, потому что создание HTTP-соединения каждые х секунд для каждого устройства очень дорого. Например, 10 000 устройств, создающих новое соединение каждые 5 сег. Этот параметр похож на то, что система работает сейчас.
Вариант второй - это то, что я хочу реализовать, но я не знаю, как это сделать (Java-PHP).
Идея заключается в следующем, на основе нажимной технологии:
Поддерживать связь от клиента к серверу открытого непрерывно. Это соединение никогда не будет передавать какие-либо данные.
Когда сервер хочет отправить сообщение клиенту, принудительно завершите непрерывное соединение.
Затем клиент мгновенно получает событие, когда соединение было закрыто. В этом случае событие закрытого соединения означает «новые сообщения», поэтому клиент будет открывать POST-соединение для получения данных.
Как поддерживать постоянное соединение между Java и PHP непрерывно и что сервер имеет возможность мгновенно закрыть его?
Это рабочий код для соединения POST между java и PHP, чтобы попытаться, если из этого кода возможно открытое соединение на неопределенный срок.
Php:
<?php
if (isset($_POST['myId']))
{ $in = $_POST['myId'];
//(...)
echo $myResponse;
}
?>
Java:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair(key,content));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
То, что вы описываете, называется «Длительный опрос», и его попросили и ответили здесь: http://stackoverflow.com/questions/333664/how-to-implement-basic-long-polling –