如何在用户不刷新浏览器的情况下不断地向用户浏览器显示更新
How to continuosly display updates to user browser WITHOUT user refreshing the browser
首先,让我设置一个舞台:我是一个新用户,这是我的第一个帖子。我通常使用Ruby来解决我的简单问题,这是我遇到的唯一类型的问题。我遇到过一个问题,99%的人告诉我,我需要使用JavaScript来解决它。当然,我不懂JavaScript,今天我花了8个多小时阅读JavaScript初学者教程。在这段漫长的序言之后,让我告诉你我需要做什么,也许Stackoverflow社区可以推荐一些工具或为我指出正确的源代码。
我有一个UNIX服务器生成一个24x7的日志,其中包含每秒或更快更新的信息。每天晚上我们砍木头,一根新的木头开始。我用Ruby编写了一个简单的应用程序,使用Ruby流行的GUI工具包之一shoe,它运行起来没有任何问题。在任何桌面,你都可以运行以下应用程序:
- 连接到UNIX服务器
- 从日志文件 读取最新的更新
- 在仪表板上显示最新的更新,无需用户干预。用户只需要启动应用程序,从那一刻起,它每秒钟自动刷新一次。
上述方法的问题在于,为了让任何人都能使用它,我需要在这个人的桌面上安装Ruby和它的所有需求,包括工具包。
我想:
- 编写一个应用程序,在创建日志的服务器上运行。
- 允许任何用户通过浏览器(HTTP)连接到我的应用程序的页面
- 用户将离开
- 我的应用程序将在没有人为干预的情况下持续更新用户打开的仪表板(浏览器上的页面)。
- 任何有浏览器的人都应该能够同时做到这一点。
谁能指出我需要使用的正确技术,也许是一些示例或代码片段?
XMLHttpRequest()对象允许您创建到服务器的HTTP请求。浏览器不需要刷新,但是客户端需要反复询问服务器是否有新的内容,所以网络流量很高。
WebSockets更适合你。使用node.js,你可以创建websocket server.
服务器代码
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) { ... }
你可以尝试使用AJAX和jQuery
http://api.jquery.com/jQuery.ajax/我建议你使用WebSockets。
当实际有数据需要推送时,服务器可以推送数据。不需要从客户端轮询(节省带宽和实时更新)。它与升级为套接字连接的标准HTTP连接(以及HTTPS)一起工作。
当你说你不熟悉Javascript(这在任何情况下都是必须的),你可以通过使用使用WebSocket的许多包装器库之一来缓解"开始"曲线(包括在浏览器不支持WebSocket的情况下的回退模式)。
无论如何,我建议您阅读规范,以了解发生了什么。
几个建议:
http://socket.io/
http://xsockets.net/
我个人更喜欢SignalR,但这需要一个。net支持的服务器(然而它与Linux上的Mono兼容)。
- javascript跨浏览器确定用户是否滚动到页面底部
- 我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet
- 如何在用户按下F5键或单击浏览器时显示自定义的fancybox's后退/关闭按钮
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- 在用户关闭/更改移动浏览器选项卡之前进行检测
- 如何向特定用户/浏览器发送浏览器通知
- 每个用户/浏览器会话只加载一次Javascript
- 如何检测用户浏览器客户端
- 检测用户浏览器高度是否>=页面正文高度
- 如何在用户不刷新浏览器的情况下不断地向用户浏览器显示更新
- 当窗口最小化时,提醒用户浏览器内事件——而不是html5通知
- 如何在用户浏览器禁用javascript时阻止用户提交表单
- 检测用户浏览器是否关闭浏览器
- Jquery检查用户浏览器类型
- 当用户浏览器缩放时,如何处理覆盖
- Javascript在用户浏览器中保存表单值以防会话过期
- 最好最完整的用户浏览器"指纹"尽可能多地识别来访者的信息
- 如何使用javascript查找用户浏览器的最大窗口宽度和当前
- 页面刷新后,Gapi 登录状态不会保留在用户浏览器中
- 如何检测用户浏览器的视觉高度