簡體   English   中英

REST API和實時客戶端

[英]REST API and Real Time client

我想要以下架構:

一個JSON REST API,實時統計數據被推送到Redis服務器並存儲在其中。

JSON REST API調用,其中任何數量的客戶端(本機或Web)都可以在存儲數據后(即實時)接收此數據。

第一個客戶端只是一個Web應用程序,以后我可能會構建一個本機應用程序。

我想知道我的唯一選擇是否是讓客戶端輪詢REST API的更改? 理想情況下,我希望服務器在更新到達時將其推送,因此不需要管理此輪詢。

我的體系結構是否適合我想要實現的目標,或者我缺少某些東西?

比輪詢更有效的方法是使用websocket,例如FayeSocket.IO 您可以在數據存儲事件下放置一個發射事件,以立即發送已存儲的數據。

使用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);
});

將接收數據。

您可以選擇Node.js和websocket進行實時推送和拉取。 要不管理隊列,您仍然可以選擇MQ。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM