#node.js #database #amazon-web-services #express #amazon-dynamodb
#node.js #База данных #amazon-веб-сервисы #экспресс #amazon-dynamodb
Вопрос:
До сих пор я работал над интерфейсом, теперь я собираюсь создать свое первое приложение с полным стеком. Я хочу использовать node.js , express и AWS для этого. На этапе проектирования я уже столкнулся с несколькими проблемами. Поэтому у меня есть несколько вопросов, и я прошу вас о помощи:
- Могу ли я отправить сообщение (простой JSON или значение базы данных) с сервера всем клиентам, которые уже открыли мою домашнюю страницу простым и дешевым способом? Я говорю не о зарегистрированных пользователях, а о всех, кто загрузил главную страницу (GET, ‘/’)?
- Используя панель администратора (‘www.xxxxxxxxx/admin ‘), я хочу отправлять сообщение на сервер один раз в день. Затем я хочу изменить HTML для отображения этого сообщения. Я думал использовать EJS для этого и загрузить это сообщение из базы данных. Могу ли я сделать это лучше? Если кто-то посещает мою домашнюю страницу (GET, ‘/’), EJS будет загружать сообщение из базы данных каждый раз! Даже несмотря на то, что его значение остается неизменным в течение 24 часов. Могу ли я получить значение один раз, а затем использовать его до тех пор, пока значение не будет изменено? Как сохранить сообщение? Как JSON на сервере? Или, может быть, в файле .env?
- Если пользователь обновляет страницу, должен ли я платить за вызов всех функций AWS для создания страницы каждый раз? Даже если в файлах ничего не изменилось?
- Как проверить, есть ли на странице новое содержимое, а затем отправить его пользователю, вместо отправки неизмененных файлов страниц: .html, .js, .css и т. Д.?
- Могу ли я отправить пользователю только измененный, динамически созданный html-файл и не отправлять снова неизмененные файлы .js и .css?
- Каждый ли пользователь, открывающий домашнюю страницу (GET, ‘/’), создает новое соединение с сервером с помощью WebSocket / socket.io ?
Ответ №1:
Я постараюсь ответить на некоторые из ваших вопросов:
- Могу ли я отправить сообщение (простой JSON или значение базы данных) с сервера всем клиентам, которые уже открыли мою домашнюю страницу простым и дешевым способом? Я говорю не о зарегистрированных пользователях, а о всех, кто загрузил главную страницу (GET, ‘/’)?
Я полагаю, вы имеете в виду отправку push-уведомлений с сервера пользователю. Это можно сделать с помощью разных сервисов в зависимости от того, что вы пытаетесь создать.
- Если вы планируете использовать GraphQL, у вас уже есть готовые подписки на GraphQL. Если вы используете AWS, выберите Appsync, который является сервисом AWS для GraphQL.
- Если вы используете REST и веб-приложение (не мобильное приложение), перейдите на AWS IoT с использованием лямбд. Вот хороший ресурс, использующий бессерверную инфраструктуру (API Gateway lambdas IoT) для пользователей, не прошедших проверку подлинности: https://www.serverless.com/blog/serverless-notifications-on-aws
- Если вы планируете использовать уведомления в мобильном приложении, вы можете выбрать SNS, «фактический» сервис для push-уведомлений в мире AWS.
- Используя панель администратора (‘www.xxxxxxxxx/admin ‘), я хочу отправлять сообщение на сервер один раз в день. Затем я хочу изменить HTML для отображения этого сообщения. Я думал использовать EJS для этого и загрузить это сообщение из базы данных. Могу ли я сделать это лучше? Если кто-то посещает мою домашнюю страницу (GET, ‘/’), EJS будет загружать сообщение из базы данных каждый раз! Даже несмотря на то, что его значение остается неизменным в течение 24 часов. Могу ли я получить значение один раз, а затем использовать его до тех пор, пока значение не будет изменено? Как сохранить сообщение? Как JSON на сервере? Или, может быть, в файле .env?
Да, именно так и должно работать. HTML изменяется динамически с использованием внешнего интерфейса на Javascript; который вызывает (например, используя axios) серверную часть каждый раз, когда вы входите, т.Е. Путь «/». Вы можете хранить эти данные в переменных внешнего интерфейса или даже использовать управление состоянием во внешнем интерфейсе с помощью REDUX, VUEX и т. Д. Помните, что код интерфейса всегда будет выполняться в браузере ваших пользователей, а не на ваших серверах!
Если пользователь обновляет страницу, должен ли я платить за вызов всех функций AWS для создания страницы каждый раз? Даже если в файлах ничего не изменилось?
Что вы можете сделать, так это сохранить весь ваш HTML, CSS, Javascript в корзине S3 и обслуживать оттуда (это очень дешево, даже бесплатно до определенного предела). Если вы хотите использовать рендеринг на стороне сервера (SSR), то да, вам нужно будет обслуживать своих пользователей каждый раз, когда они делают запрос GET, например. Если вы используете lambda, первый миллион запросов в месяц бесплатен. Если у вас есть экземпляр EC2 для обслуживания вашего контента, то t2.micro также является бесплатным. Если вам нужно больше, вам придется заплатить.
Как проверить, есть ли на странице новое содержимое, а затем отправить его пользователю, вместо отправки неизмененных файлов страниц: .html, .js, .css и т. Д.?
Я думаю, вам нужно понять, как JS (или фреймворки, такие как React, Vue или Angular) делают это. По сути, вы загружаете код js на клиент, и js предоставляет всю функциональность для соответствующего обновления бэкэнда и интерфейса. Для того, чтобы соединить интерфейс с серверной частью, используйте, например, Axios.
Могу ли я отправить пользователю только измененный, динамически созданный html-файл и не отправлять снова неизмененные файлы .js и .css?
Смотрите ответ выше. Использование фреймворков, таких как React или Vue, вам очень поможет.
Каждый ли пользователь, открывающий домашнюю страницу (GET, ‘/’), создает новое соединение с сервером с помощью WebSocket / socket.io ?
Зависит от того, что вы кодируете. Но по умолчанию происходит то, что пользователь будет делать новый запрос GET каждый раз, когда он обращается к вашему домену, и все. (Это не устанавливает никакого соединения, если вы не укажете коду, чтобы сделать это).
Надеюсь, это поможет!! Счастливого кодирования!
Комментарии:
1. @roadtosleep всегда пожалуйста. Если вы найдете это решение полезным, пожалуйста, поддержите мой ответ, большое спасибо!