事件发生时获得从快速到正常通话的http通话

时间:2019-02-10 15:59:36

标签: javascript angular express

我正在构建一个有角度的应用程序,它将使大约一千人同时连接以预订车票。我只希望其中的“ XYZ”在注册Angular组件中同时访问。其他人将看到“等候室”组件,直到轮到他们了。 我将整个过程设置如下:

  1. 用户进入页面。
  2. 我对expressjs服务器进行了http调用
  3. 服务器检查“连接”集合是否包含少于XYZ文档
  4. 如果为true,则它将解锁用户注册组件,并使用http post req来在数据库中创建一个新文档。如果为false,则将其隐藏并显示出等候室组件
  5. 当用户离开页面时,他的“连接”集合中的文档会被http删除调用破坏。

完全工作。

现在的问题是,我想创建一种“优先”系统,因为像这样,即使您刚刚刷新,也可能很幸运并且可以访问,即使您很快就到了并且有人在等待从1990年代开始。因此,我引入了“优先级”系统。当用户进行第一个http调用时,如果不允许该用户,服务器将创建一个时间戳并将其推送到数组中。

const timestamps = []
.
.
.
// this below is in http get req
Connessione.countDocuments({},(err,count)=>{
    if(count<=nmax){
      console.log("Ok")
      res.status(200).json({allowed: true})
    }
    else{
      const timestamp = req.params.timestamp;
      timestamps.push(timestamp);
      console.log("Semo troppi")
      res.status(401).json({allowed: false})
    }
  });

这个想法是听数据库的变化,以及当数据库中只有XYZ-1时。打电话给第一个时间戳记的前端,对他说:“嘿,如果要完成,您可以走了。”然后解锁他对注册组件的访问权限。

问题是我无法从角度出发每秒发出连续的http请求,直到有空闲的地方为止... 是否有任何方法可以在服务器上发送请求,并且服务器说“确定”时,调用angular并说“嘿,伙计。你可以去!”? 希望你理解我的问题。如果没有在评论中问我。 预先感谢

1 个答案:

答案 0 :(得分:0)

即使一开始我在使用套接字时遇到麻烦,所以我都会尝试以一种简单的方式来解释该概念,无论何时编写APIEndpoint,您都有一种单向连接,即发送request发送到服务器,然后返回一些response,如下所示。

Event 1:
(Client) -> Request -> (Server)

Event 2:
(Client) <- Response <- (Server)

对于API,如果没有请求,您将无法获得响应。

到目前为止,要克服此问题,我可以想到两种可能的方法。

  1. 使用套接字,使用套接字可以创建双向连接。像这样

(Server) <-> data <-> (Client)

这意味着您可以通过两种方式(客户端到服务器和服务器到客户端)传递数据。因此,只要发生事件(在数据库中添加或更新了一些数据),事件就可以将其发射或广播给客户端,并且客户端可以监听套接字并接收它。

在您的情况下,因为这是两个连接,所以可以从angular和 我在底部附加了一些链接。请看看。

  1. 使用XML / AJAX请求,这不是首选方法,使用setInterval可以每隔5秒左右调用一次服务器并执行所需的操作。
setInterval(ajaxCall, 5000); //5000 MS == 5 seconds

function ajaxCall() {
    //do your AJAX stuff here
}

链接: