У меня есть веб-сайт Wordpress с системой рабочих заказов.Теперь я хочу создать приложение для Android, которое отображает каждый новый заказ в виде списка , как только заказ был сделан.
Последние два дня я думал о следующих решениях:
- Простые запросы HTTP GET каждые 10 секунд
- Веб-сокеты
- Бинарный журнал MySQL + Pusher Ссылка
- События, отправленные сервером
Мои мысли (работа со стеком LAMP ):
- Простые HTTP-запросы, очевидно, являются наиболее неэффективным решением.
- Я понял, что веб-сокеты и Apache не работают вместе.
- Чувствую себя довольно взволнованно, и я хочу избегать любых сторонних сервисов, если смогу.
4 .Похоже, что это оптимальный путь для меня, однако есть некоторые проблемы с Apache / php и Server Sent Events из того, что я испытал.
Я пытался реализовать простой демонстрационный скрипт, но я не понимаю, почему некоторые из них используют бесконечный цикл while, чтобы держать соединение открытым, а другие нет.Вот пример без цикла и здесь с бесконечным циклом , также здесь
В дополнение к этому, когда я тестировал вариант с бесконечнымцикл, вся моя страница не будет загружаться из-за этой функции sleep ().Похоже, что весь сервер зависает, когда я его использую.У кого-нибудь есть идеи как это исправить?Или у вас есть другие предложения?
Это код, который вызывает проблемы (скопировано с здесь ) и добавил отсутствующую фигурную скобку:
<?php
// make session read-only
session_start();
session_write_close();
// disable default disconnect checks
ignore_user_abort(true);
// set headers for stream
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
header("Access-Control-Allow-Origin: *");
// Is this a new stream or an existing one?
$lastEventId = floatval(isset($_SERVER["HTTP_LAST_EVENT_ID"]) ? $_SERVER["HTTP_LAST_EVENT_ID"] : 0);
if ($lastEventId == 0) {
$lastEventId = floatval(isset($_GET["lastEventId"]) ? $_GET["lastEventId"] : 0);
}
echo ":" . str_repeat(" ", 2048) . "\n"; // 2 kB padding for IE
echo "retry: 2000\n";
// start stream
while(true){
if(connection_aborted()){
exit();
}
else{
// here you will want to get the latest event id you have created on the server, but for now we will increment and force an update
$latestEventId = $lastEventId+1;
if($lastEventId < $latestEventId){
echo "id: " . $latestEventId . "\n";
echo "data: Howdy (".$latestEventId.") \n\n";
$lastEventId = $latestEventId;
ob_flush();
flush();
}
else{
// no new data to send
echo ": heartbeat\n\n";
ob_flush();
flush();
}
}
// 2 second sleep then carry on
sleep(2);
}
?>
I'mблагодарен за каждый совет, который я могу получить!:)
РЕДАКТИРОВАТЬ:
Основная идея состоит в том, чтобы часто проверять мою базу данных MySQL на наличие новых записей и, если есть новый заказ, форматировать данные красиво и отправлять информацию черезSSE для моего приложения для Android.
Я уже нашел библиотеки для получения SSE на Android, основная проблема на стороне сервера.