如何在没有重新加载的情况下创建自动更新新闻源?

时间:2013-05-03 00:01:49

标签: javascript mysql reload long-polling updating

如何创建自动更新新闻源?我打算使用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 */
});

但这对大量人来说无效。有没有人对我应该开始的地方,我需要使用的api和/或程序有任何建议?

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。在您的Node webserver上构建一条路由,使其获取新闻帖并向所有连接的客户端广播。然后,只需将请求发送到Node。

在Node-to-client前端,您需要了解如何进行长轮询。这很容易 - 你让客户端连接起来,并且在消息传递给它之前不要结束响应。你通过事件处理程序来处理这个问题(Postal.JS值得为此付出代价)。

AJAX部分很简单。 $.get("your/node/url").then(function(d) { });开箱即用。当它返回(成功或失败)时,重新启动它。将其超时设置为60秒左右,并在一个事件以其为目标时在节点前面结束响应。

大多数网站都是这样做的。 websockets的问题在于,由于旧的IE版本不支持它们,它们现在有点像黑羊。如果你能负担得起,可以考虑长时间轮询。

(Psst。谁告诉你Node不会在成千上万的用户中工作正在通过他们的驴子讨论。如果有的话,由于Node上的连接几乎没有什么,Node更适合大并发性由于Node的事件驱动性质而保持活力。不要听取反对者的意见。)