我希望拥有以下架构:
JSON REST API,将实时统计数据推送到Redis服务器并存储在其中。
JSON REST API调用,其中任何数量的客户端(本机或Web)可以在存储之后(即实时地)接收该数据。
第一个客户端将只是一个Web应用程序,我可能会在以后构建一个本机应用程序。
我想知道我的唯一选择是客户端轮询REST API以进行更改吗?理想情况下,我希望服务器在到达时推送更新,因此我不需要管理此轮询。
我的架构是否适合我想要达到的目标,或者我错过了什么?
答案 0 :(得分:1)
比轮询更有效的方法是使用websockets,例如Faye或Socket.IO。您可以在数据存储事件下放置emit事件,以立即发送已存储的数据。
使用Socket.IO,你可以这样做:
var io = require('socket.io').listen(80);
//note that you can listen on HTTP servers
//can also be used with Express applications, etc
//when data is stored, run this
io.sockets.emit('event', {
object: 'that is sent to client'
});
然后,您可以使用它来告诉客户端有新数据,或者您可以直接发送新存储的数据。可以定义自定义事件,例如
io.sockets.emit('data_receive', function (data) {...});
将会像客户那样接受:
var socket = io.connect('http://socket.location');
socket.on('data_recieve, function (data) {
//data is whatever sent from server
});
在Faye,你会做这样的事情:
var http = require('http');
var faye = require('faye');
var bayeux = new faye.NodeAdapter({
mount: '/faye',
timeout: 45
});
bayeux.listen(8000);
然后,当存储数据时,您将运行:
client.publish('/path', {
data: 'Hello world'
});
任何创建客户端的客户端都是这样的:
var client = new Faye.Client('http://socket:port/path');
client.subscribe('/path', function(data) {
alert('Received data: ' + data.text);
});
将收到数据。
答案 1 :(得分:0)
您可以选择Node.js和websocket实时推送和拉取。 要不管理队列,您仍然可以选择MQ。