2014-10-01 1 views
0

Я создал веб-приложение, и я добавил свой собственный API к нему:Как запросить мой собственный веб-api из моего собственного webapp?

/api/v1.0/articles/new/{since} 

Этот API возвращает JSON новых статей, поскольку {since}, где {since} является Отметка времени Unix.

Я хотел бы добавить автоматические обновления сайта и автоматически запрашивать статьи, пока пользователь находится на сайте, но я не совсем знаю, как это сделать.

Я думал, используя следующий JavaScript (JQuery), чтобы сделать это:

setInterval(function() { 
    $.get('/api/v1.0/articles/new/{since}', function (data) { 
     /* parse data, add new articles to page */ 
     /* since = now */ 
    }); 
}, 30*1000) 

Будет ли это правильное решение? Я беспокоюсь, что если на мой сайт зайдет 500 человек, я получаю 500 запросов каждые 30 секунд, что может убить мой сервер.

Какие еще возможные решения я мог бы попробовать? Есть ли способ для сервера вытеснять данные в webapp, когда есть что-то новое, вместо того, чтобы я тянул его и запрашивал? (Это называется комета ajax?)

+0

Создайте кеш, который читает api. Отправляйте пользователям (всего 500 из них) читать 1 файл кеша. – briansol

ответ

1

Выполнение 30-секундного опроса с участием 500 пользователей, вы будете обслуживать в среднем около 17 запросов в секунду. Независимо от того, удастся ли вам убить ваш сервер, зависит от того, что вы делаете в каждом запросе, каких других запросов вы обслуживаете, какого оборудования работает ваш сервер и т. Д. Если все, что вы делаете по каждому запросу, представляет собой простой запрос к базе данных по таблице - Предположительно индексируется по метке - 17 запросов в секунду довольно светло. Однако, на мой взгляд, вы действительно должны реализовать некоторую форму push-сервера - то, что вы называете «комета ajax». Во-первых, если какой-либо из ваших вызовов API занимает больше 30 секунд, вы будете выполнять другой вызов API до того, как закончится предыдущий, что может вызвать эффект «снежного кома».

Точно так же, как вы нажимаете сервер, зависит от того, что доступно в вашем стеке сервера, и о том, что вы ожидаете от своих клиентских браузеров. Например, если вы используете Node.js, вы можете использовать пакет socket.io, чтобы сделать напор сервера, используя веб-сокеты. Но старые браузеры не поддерживают веб-сокеты, и не все версии браузеров веб-сокетов не совпадают, поэтому вам может потребоваться рассмотреть подходы на основе длинного опроса AJAX или многопользовательской потоковой передачи документов. В общем, вам нужно будет установить какой-либо код или пакет на вашем сервере для поддержки используемого вами подхода, хотя есть некоторые решения, которые будут прозрачно определять, какой подход лучше всего подходит для каждого клиентского соединения. (Например, SignalR делает это, но это для стека Microsoft/.NET.)

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

http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

+0

Самый отличный ответ. Спасибо, сэр! – bodacydo