2013-05-03 1 views
0

Как мне создать автоматическое обновление новостей? Я собирался использовать NodeJS, но кто-то сказал мне, что это не сработает, когда я войду в тысячи пользователей. Прямо сейчас у меня есть это, чтобы вы могли публиковать текст в ленте новостей, и он будет сохраняться в базе данных mysql. Затем, всякий раз, когда вы загружаете страницу, она отображает все сообщения из этой базы данных. Проблема в том, что вам нужно перезагружать страницу каждый раз, когда есть обновление. Я собирался использовать это, чтобы рассказать nodejs сервер кто-то разместил обновление ...Как бы вы создали автоматическое обновление новостей без перезагрузки?

index.html

function sendPost(name,cont) { 
    socket.emit("newPost", name, cont); 
} 

app.js

socket.on("newPost", function (name,cont) { 
    /* Adding the post to a database 
    * Then calling an event to say a new post was created 
    * and emit a new signal with the new data */ 
}); 

Но это не будет работать для тонны людей. У кого-нибудь есть предложения о том, где я должен начать, апи и/или программы, которые мне нужно будет использовать?

ответ

2

Вы на правильном пути. Постройте маршрут на своем веб-сервере узла, который заставит его получать ленту новостей и транслировать все подключенные клиенты. Затем просто запустите запрос в узел.

На переднем плане от узла к клиенту вам нужно научиться делать длинный опрос. Это довольно просто - вы позволяете клиенту подключаться и не заканчивать ответ до тех пор, пока сообщение не перейдет к нему. Вы обрабатываете это через обработчики событий (Postal.JS стоит подобрать для этого).

Часть AJAX проста. $.get("your/node/url").then(function(d) { }); работает из коробки. Когда он вернется (либо успех, либо неудача), перезапустите его. Установите его тайм-аут до 60 секунд или около того, и завершите ответ на фронте узла в тот момент, когда на него было нацелено одно событие.

Так обстоит дело с большинством сайтов. Проблема с websockets заключается в том, что сейчас они немного черной овцы из-за того, что старые версии IE не поддерживают их. Вместо этого рассмотрите длительный опрос, если вы можете себе это позволить.

(Psst. Кто сказал вам, что Node не будет работать тысячами пользователей, говорит через их задницы. Если что-либо, узел более адаптирован к большому параллелизму, чем PHP из-за того, что соединение на узле принимает почти ничего не нужно поддерживать из-за обусловленной событиями природы узла. Не слушайте скептиков.)

+0

AJAX-вызов предполагает, что jQuery используется, кстати. При необходимости измените. –

+0

Не могли бы вы объяснить «$ .get (« ваш/узел/url »). Когда (function (d) {});" Больше? – Beaurocks16

+0

@ Beaurocks16: Хорошо. jQuery позволяет использовать сокращенное выражение для вызова методов AJAX. '$ .get (" ваш/node/url "), затем (function (d) {});' точно эквивалентен: '$ .ajax ({url:" your/node/url ", type:" GET ", success: function (d) {}, error: function (d) {}});'. Обратите внимание, что я допустил ошибку - это 'then', а не' when'. Это выполняет вызов GET на URL-адрес вашего/node/url, что является удобным способом получения данных. –

Смежные вопросы