如何在用户刷新浏览器的情况下不断显示用户浏览器的更新

时间:2013-06-16 20:41:17

标签: javascript

首先,让我设置舞台:我是新用户,这是我的第一篇文章。我通常使用Ruby来解决我遇到的唯一问题类型的简单问题。 我遇到并发出了99%的人告诉我需要使用JavaScript来解决它的问题。当然我不懂JavaScript,今天我花了8个多小时阅读有关初学者的JavaScript教程。在这个长序言之后,让我告诉你我需要做什么,也许Stackoverflow社区可以推荐一些工具或指向正确的来源。

我有一台UNIX服务器生成一个24x7的日志,其中包含每秒或更快更新的信息。每天晚上我们都会剪切日志并开始新的日志。 我使用Ruby流行的GUI工具包之一在Ruby中编写了一个简单的应用程序,并且它没有问题。在任何桌面上,您都可以运行以下应用程序:

  1. 连接到UNIX服务器
  2. 从日志文件中读取最新更新
  3. 在没有用户干预的情况下显示仪表板上的最新更新。用户只需要启动应用程序,然后从那一点开始每秒刷新一次。
  4. 上述方法的问题在于,为了让任何人都能使用它,我需要安装Ruby及其所有要求,包括人员桌面上的工具包。

    我想:

    1. 编写将在创建日志的服务器上运行的应用程序。
    2. 允许任何用户通过指向我的应用程序页面的浏览器(HTTP)进行连接
    3. 用户将离开
    4. 我的应用程序将在没有人为干预的情况下持续更新用户打开的仪表板(浏览器页面)。
    5. 任何拥有浏览器的人都应该能够同时执行此操作。
    6. 有人能指出我需要使用的正确技术,也许是一些示例或代码片段吗?

3 个答案:

答案 0 :(得分:2)

XMLHttpRequest()对象允许您创建对服务器的HTTP请求。浏览器不需要刷新,但客户端需要重复询问服务器是否有新内容,因此无论如何网络流量都很高。

WebSockets 更适合您。使用node.js,您可以创建websocket服务器...

服务器代码

var http = require('http');
var WebsocketServer = require("websocket").server;

var httpServer = http.createServer(function(){});
httpServer.listen(/*port*/ 9822, function(){});
var wsServer = new WebsocketServer({httpServer: httpServer});

......并与客户沟通

wsServer.on('request', function(request) {
  var connection = request.accept(null, request.origin);    

  // respond to client request
  connection.on('message', function(message) {
    connection.send(data);
  });

  // or create an event on the client without its request
  if(something) connection.send(data);
});

客户端可以使用websockets连接服务器

客户端代码

ws = new WebSocket('ws://' + server + ':9882');

// create request
ws.send(data);

// handle request
ws.onmessage = function(message) { ... }

请参阅websockets上的this tutorial

答案 1 :(得分:1)

您可以尝试使用AJAX和jQuery

http://api.jquery.com/jQuery.ajax/

答案 2 :(得分:1)

我建议您使用WebSockets

然后,当实际存在要推送的数据时,服务器可以推送数据。无需从客户端轮询(节省带宽和更新是实时的)。它适用于升级到套接字连接的标准HTTP连接(以及HTTPS)。

正如您所说,您不熟悉Javascript(在任何一种情况下都是必须的),您可以使用许多使用WebSocket的包装程序库中的一个来缓解“get started”曲线(包括WebSocket是的回退模式)浏览器不支持。

我建议你不管怎样阅读specifications以了解发生了什么。

一些建议:
http://socket.io/
http://xsockets.net/

我个人更喜欢SignalR,但这需要启用.Net的服务器(但compatible with Mono on Linux}。