【问题标题】:REST API and Real Time clientREST API 和实时客户端
【发布时间】:2013-08-30 06:30:21
【问题描述】:

我想要以下架构:

一个 JSON REST API,实时统计数据被推送到 Redis 服务器并存储在其中。

一个 JSON REST API 调用,其中任意数量的客户端(本地或网络)可以在数据存储后接收这些数据 - 即实时。

第一个客户端只是一个网络应用程序,我以后可能会构建一个原生应用程序。

我想知道我唯一的选择是让客户端轮询 REST API 以进行更改吗?理想情况下,我希望服务器在更新到达时推送更新,这样我就不需要管理此轮询。

我的架构是否适合我想要实现的目标,还是我遗漏了什么?

【问题讨论】:

    标签: javascript node.js rest real-time polling


    【解决方案1】:

    比轮询更有效的方法是使用 websockets,例如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);
    });
    

    将接收数据。

    【讨论】:

      【解决方案2】:

      您可以选择 Node.js 和 websocket 来实时推送和拉取。 要不管理队列,您仍然可以选择 MQ。

      【讨论】:

        猜你喜欢
        • 2013-04-28
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2019-11-25
        相关资源
        最近更新 更多