我正在尝试开发我的第一个节点应用程序..那就是说我有一个C#应用程序通过POST将用户特定的json数据提交给url让我们称之为//localhost/data/send
,这个数据将每隔~1发送一次-5秒(还没决定)。
然后我将有一个网站,要求用户登录,然后轮询该用户数据并显示它。我现在不是每隔x秒刷新一次页面,而是认为我可以使用某种套接字或基于事件的技术,如socket.io或redis pub / sub,将数据推送到连接的客户端。
但是接下来,我该如何确保两件事:
我的思维过程是,当用户登录桌面c#app时,它开始轮询以检查用户是否/何时登录到Web界面。
用户登录Web界面后,桌面应用会根据桌面应用和Web应用之间匹配的用户名识别会话ID。然后它开始仅推送到该会话ID。
这需要redis吗?或者我可以使用一个简单的mysql表和socket.io?
一旦用户注销,数据就不需要持久。
答案 0 :(得分:1)
如果数据不需要保留,并且这是一个用户很少的内部简单应用程序,那么我会创建一个模块,其中包含一个队列和方法来添加和删除队列中的项目。
每个登录用户的模块都有一个队列。当用户离开页面(onunload)时,您将其注销并删除该用户的队列。当您调用c#app调用添加事件时,队列将不存在,这意味着用户未登录。当用户登录时,您将为该用户创建队列。
请参阅此处了解如何在快递中执行身份验证。 How to do authentication with Node.js, Express and 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];
}
}