0

我正在尝试开发我的第一个节点应用程序。据说我有一个 C# 应用程序,它通过 POST 将用户特定的 json 数据提交到一个 url,让我们调用它//localhost/data/send,这些数据将每 1-5 秒发送一次(尚未决定)。

然后我将有一个需要用户登录的网站,然后轮询该用户的数据并显示它。现在,与其每 x 秒刷新一次页面,我想我可以使用某种基于套接字或事件的技术,例如 socket.io 或 redis pub/sub 来将数据推送到连接的客户端。

但这里有一个问题,我该如何确保两件事:

  1. 连接的用户只能访问他们的信息
    1. 我目前正在使用快递,但这对任何事情都是开放的..
  2. 仅当有用户登录远程 Web 界面时才会发送数据

我的想法是,当用户登录到桌面 c# 应用程序时,它开始轮询以检查用户是否/何时登录到 Web 界面。

一旦用户登录到 Web 界面,桌面应用程序就会根据桌面应用程序和 Web 应用程序之间匹配的用户名识别会话 ID。然后它开始仅推送到该会话 ID。

甚至需要redis吗?或者我可以使用一个简单的 mysql 表和 socket.io 吗?

一旦用户注销,数据就不需要持久化。

4

1 回答 1

1

如果不需要持久化数据并且这是一个用户很少的内部简单应用程序,那么我将创建一个模块,该模块具有一个队列以及从队列中添加和删除项目的方法。

该模块将为每个登录用户提供一个队列。当用户离开页面(onunload)时,您将他们注销并删除该用户的队列。当您调用 c# 应用程序调用添加事件时,队列将不存在,这意味着用户未登录。当用户登录时,您为该用户创建队列。

请参阅此处了解如何在 express 中进行身份验证。如何使用 Node.js、Express 和 Mongoose 进行身份验证?

像这样的东西:

var queue = {};

exports.queueEvent = function(user, event){
  if(queue[user]){
    queue[userid].push(event);
  }
  else{
    return 'user not logged in, come back later';
  }
};

exports.getEvent = function(user){
  if(!queue[user]){
    queue[user] = [];  // this indicates the user is logged in.
    return null; // no events yet.
  }
  return queue[user.shift();
}

exports.logOutUser = function(user){
  if(queue[user]){
    delete queue[user];
  }
}
于 2012-12-12T14:13:10.027 回答