Как получать обновления с Сервера без запроса каждые n-е секунды

Я создаю мобильное приложение, которое получает данные с сервера всякий раз, когда на сервере появляются новые данные. Я использую Cordova и Ionic Framework для моего мобильного приложения и PHP / MySQL / Apache для API и сервера, который мобильное приложение извлекает данные.

Есть ли способ, как я могу получить данные (в формате JSON) с моего сервера без постоянного запроса данных каждые n-е секунды, используя http.get в моем мобильном приложении? Поскольку мне нужно извлекать только всякий раз, когда у него есть новые данные, и не всегда, когда у него есть новые данные, а иногда, когда на пике у него появляются новые данные каждую секунду. Apache / PHP может справиться с этим, или мне нужно переключиться, чтобы сказать, например, nodejs или что-то? Заранее спасибо.

Кстати, я хочу, чтобы мое мобильное приложение получало данные в течение секунды.

Мой вопрос очень похож с этим Получать обновления с сервера с мобильной платформой а также https://softwareengineering.stackexchange.com/questions/225589/how-to-refresh-keep-up-to-date-content-in-the-browser-without-overloading-the-se но я все еще вешаюсь прямо сейчас.

0

Решение

Node.js и Socket.io делают что-то вроде этого почти тривиальным, однако вы можете сделать это практически с любым веб-сервером. Есть несколько вариантов сделать это, но я склоняюсь к веб-сокетам, когда могу. Я никогда не использовал это, но трещотка кажется, делает то, что вы хотите для PHP. Посмотрите на их Hello World учебник чтобы увидеть, как его настроить.

Поскольку вы используете Cordova, веб-сокеты имеют смысл. Вот пример реализации в Node.js с использованием socket.io.

var app = require('http').createServer(handler);
var io = require('socket.io')(app);

app.listen(80);

function handler (req, res) {
// We aren't serving any http requests outside of socket.io.
// Return a 404 error for all other requests.
res.status(404).send('Not found');
}

io.on('connection', function (socket) {
//  This is either a new client connection, or a client reconnecting.
//  You can use cookies to establish identity and handle reconnects
//  differently if necessary.

socket.on('new-content', function(content) {
//  persist the file in the database if necessary and resend it to all
//  connected clients
socket.broadcast.emit('new-content', content);
});
});

Здесь мы просто создаем простой сервер ретрансляции. Вы можете отправить «файл», который в данном случае представляет собой просто строку содержимого, и он будет разослан всем другим подключенным пользователям. В этом сценарии вам не нужно постоянно запрашивать базу данных для поиска нового контента, вы можете запускать ее из контента, поступающего от клиентов. Если вы хотите, чтобы офлайн-пользователи могли получать этот контент, когда они подключаются к Интернету, вам понадобится какая-то настойчивость и механизм для отслеживания и обработки этого.

Сценарий на стороне клиента также довольно прост.

<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io('http://myserver.com');
socket.on('new-file function (content) {
// A new file was sent from the server, do something with the content here.
});

function sendFile(content) {
socket.emit('new-file', content);
}
</script>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]