2015-02-20 2 views
0

Я разрабатываю приложение типа текстового сообщения.Реализация технологии 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); 
+2

То, что вы описываете, называется «Длительный опрос», и его попросили и ответили здесь: http://stackoverflow.com/questions/333664/how-to-implement-basic-long-polling –

ответ

1

WebSocket должен быть лучшим решением в вашем случае. Вы можете найти множество библиотек для разных языков даже для PHP и Java. WebSocket позволяет создавать постоянное двунаправленное соединение. Таким образом, вы можете отправить сообщение с сервера клиенту без какого-либо запроса на стороне клиента.