0

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

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

  1. 连接到 UNIX 服务器
  2. 从日志文件中读取最新更新
  3. 无需用户干预即可在仪表板上显示最新更新。用户只需要启动应用程序,从那时起,它会每秒自动刷新一次。

上述方法的问题在于,为了让任何人都能使用它,我需要安装 Ruby 及其所有要求,包括该人桌面上的工具包。

我想:

  1. 编写一个将在创建日志的服务器上运行的应用程序。
  2. 允许任何用户通过指向我的应用程序页面的浏览器 (HTTP) 进行连接
  3. 用户会走开
  4. 我的应用程序将在没有人为干预的情况下不断更新用户打开的仪表板(浏览器上的页面)。
  5. 任何拥有浏览器的人都应该能够同时执行此操作。

谁能指出我需要使用的正确技术以及一些示例或代码片段?

4

3 回答 3

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 的本教程。

于 2013-06-16T21:09:00.057 回答
1

您可以尝试使用 AJAX 和 jQuery

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

于 2013-06-16T20:59:15.397 回答
1

我建议您使用WebSockets

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

正如您所说,您不熟悉 Javascript(这在任何一种情况下都是必须的),您可以通过使用使用 WebSocket 的众多包装库之一来缓解“入门”曲线(包括回退模式,以防 WebSocket 不支持浏览器)。

无论如何,我建议您阅读规范以了解发生了什么。

几个建议:
http :
//socket.io/ http://xsockets.net/

我个人更喜欢SignalR,但这需要启用 .Net 的服务器(但它与 Linux 上的 Mono 兼容)。

于 2013-06-16T21:17:07.530 回答