Получите http-вызов от экспресс до углового, когда событие - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю угловое приложение, которое позволит одновременно подключить около тысячи человек, чтобы забронировать билет.Я хочу, чтобы только «XYZ» из них имели доступ одновременно при регистрации углового компонента.Другие будут видеть компонент "зал ожидания", пока не наступит их очередь.Я настроил все это так:

  1. Пользователь заходит на страницу.
  2. Я делаю http-вызов серверу expressjs
  3. Сервер проверяет, "подключены ли""коллекция содержит менее XYZ документов
  4. Если true, разблокируется компонент регистрации пользователя, и с помощью http post req он создает новый документ в базе данных.если значение false, оно оставляет его скрытым и отображает компонент комнаты ожидания
  5. Когда пользователь покидает страницу, его документ в коллекции «соединений» уничтожается вызовом http delete.

Полностью работает.

Проблема сейчас в том, что я хочу создать своего рода «приоритетную» систему, потому что, если вы просто обновитесь, вам может повезти и получить доступ, даже если вы скоро приехали и тамэто кто ждет с 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-запросы каждую секунду от угловых до тех пор, пока не будет свободного места ... Есть ли какой-нибудь метод для отправки запроса на сервер, и когда сервер говорит «ОК», вызывает угловой и говорит: «Эй, чувак. Ты можешь идти!»?Надеюсь, вы поняли мой вопрос.Если нет, спросите меня в комментариях.Заранее спасибо

1 Ответ

0 голосов
/ 10 февраля 2019

Даже у меня были проблемы с сокетами в начале, поэтому я попытаюсь объяснить концепцию простым способом. Всякий раз, когда вы пишете API или Endpoint, у вас есть одностороннее соединение, т.е. вы отправляете request всервер, и он возвращает обратно response, как показано ниже.

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

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

Для API, без запроса вы не можете получить ответ.

Чтобы преодолеть эту проблему на данный момент, я могу думать о двухвозможные пути.

  1. Использование сокетов , с помощью сокетов вы можете создать двустороннее соединение.Примерно так

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

Это означает, что вы можете передавать данные в обоих направлениях: клиент-сервер и сервер-клиент.Таким образом, всякий раз, когда происходит событие (некоторые данные добавляются или обновляются в базе данных), его можно передать или передать клиенту, а клиент может прослушать сокет и получить его.

В вашем случае, так как это два соединенияВы можете отправлять данные из угловых, и я приложил несколько ссылок внизу.пожалуйста, посмотрите.

Использование XML / AJAX-запроса . Это не предпочтительный метод, с помощью setInterval вы можете вызывать сервер каждые 5 секунд или около того и выполнять необходимую операцию.
setInterval(ajaxCall, 5000); //5000 MS == 5 seconds

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

Ссылки:

...