Я извлек небольшой урок (на собственном горьком опыте). Я сделал приложение для обработки чисел, которое работает на облачных сервисах Ubuntu AWS EC2 (использует мощные графические процессоры), и я хотел создать для него интерфейс, чтобы просто наблюдать за его прогрессом в реальном времени. Из-за того, что ему нужны данные в реальном времени, было очевидно, что мне нужны веб-сокеты для отправки обновлений.
Все началось с проверки концепции и отлично сработало. Но затем, когда мы захотели сделать его общедоступным, нам пришлось добавить пользовательский сеанс, поэтому нам потребовались функции входа в систему. И независимо от того, как вы на это смотрите, веб-сокет должен знать, с каким пользователем он имеет дело, поэтому мы воспользовались сокращением использования веб-сокетов для аутентификации пользователей. . Это казалось очевидным и удобным.
На самом деле нам пришлось провести некоторое время в тишине, чтобы соединение было надежным. Мы начали с нескольких дешевых руководств по веб-сокетам, но обнаружили, что наша реализация не может автоматически переподключаться при разрыве соединения. Все улучшилось, когда мы перешли на socket-io. Socket-io обязательно!
Сказав все это, честно говоря, я думаю, что мы упустили некоторые замечательные функции socket-io.Socket-io может предложить гораздо больше, и я уверен, что если вы учтете это в своем первоначальном дизайне, вы сможете получить от него больше. Напротив, мы просто заменили старые веб-сокеты на функциональность веб-сокетов socket-io, и на этом все. (без комнат, без каналов, ...) Редизайн мог бы сделать все более мощным. Но у нас не было на это времени. Об этом нужно помнить для нашего следующего проекта.
Затем мы начали хранить все больше и больше данных (история пользователей, счета, транзакции, ...). Мы сохранили все это в базе данных AWS Dynamodb и СНОВА использовали socket-io для передачи операций CRUD от внешнего интерфейса к серверному. Думаю, мы тут не туда свернули. Это была ошибка.
- Потому что вскоре после этого мы узнали, что облачные сервисы Amazon (AWS) предлагают отличные инструменты балансировки / масштабирования нагрузки для приложений RESTful .
- Теперь у нас сложилось впечатление, что нам нужно написать много кода для подтверждения операций CRUD.
- Недавно мы реализовали интеграцию с Paypal. Нам удалось заставить его работать. Но опять же, все руководства делают это с помощью RESTful API . Нам пришлось переписать / переосмыслить их примеры, чтобы реализовать их с помощью веб-сокетов. Однако мы заставили его работать довольно быстро. Но кажется, что мы идем против течения.
Сказав все это, мы выйдем в эфир на следующей неделе. Доехали вовремя, все работает. И это быстро, но будет ли масштабироваться?