Однажды я пролистывал хронику твиттера и наткнулся на этот твит: «Мы уже отправили человека на Луну. Почему у нас нет приложения для чтения pdf для нас?», для вас это может быть просто очередным подростком, жалующимся на жизнь, но для меня это в основном вызов и добавление того факта, что мне также нужно было что-то познакомить моих коллег с тем, что мы назвали «учебой четверга», я решил это сделать.
Я заварил кофе и начал программировать… ладно, короче говоря, я закончил приложение, оно было не так хорошо, как я ожидал, но оно работало хорошо, я также рассказал своим коллегам, и все прошло хорошо, но сейчас я более опытный разработчик, и я думаю, что могу сделать лучше, поэтому я пишу здесь эту статью, я хочу задокументировать каждую часть моего процесса разработки, так что давайте начнем.
Технологии
Чтобы сделать это приложение, я решил использовать эти технологии, которые я покажу ниже:
- React Native (для приложения)
- Node.js, экспресс и socket.io (для серверной части)
- Rabbit MQ (для очереди я объясню подробнее об этом последнем)
- IBM Text to Speech Service (для превращения PDF в аудиокнигу)
- AWS S3 (для управления файлами наших аудиокниг)
Итак, теперь, когда у нас есть все эти технологии, я расскажу подробнее о каждом из них.
Реагировать на родной
У меня есть две причины выбрать React Native. Во-первых, мы можем компилировать как для Android, так и для IOS, а вторая причина заключается в том, что мне удобно реагировать (и реагировать на него), и на данный момент я доволен результатами, которые может дать мне этот фреймворк. так что менять пока не планирую.
Node.js
Зона комфорта также применяется здесь, я использую node.js почти для каждого приложения, которое я создал, и я очень доволен результатами, которые этот язык может мне предоставить. Так как у нашего бэкенда не будет столько маршрутов, я решил создать наш бэкенд с нуля, используя только экспресс (для апи) и socket.io (для сокета).
Кролик MQ
Вы знаете, сколько слов может быть в книге? Конечно, у меня нет точного числа, но может быть много, из-за этого я решил использовать Rabbit MQ для управления нашей очередью, поэтому в основном каждый раз, когда кто-то отправляет новый запрос на создание новой аудиокниги, наш API будет добавлять новый процесс в нашей очереди для создания этой аудиокниги.
Преобразование текста в речь IBM
Вот ядро нашего приложения, в первый раз, когда я делал это приложение, я использовал простой tts, который читается роботизированным виртуальным голосом, на этот раз я хочу сделать что-то лучше, поэтому я решил использовать этот сервис для создания аудиокниг, которые хорошо слушать.
АВС S3
Эта служба будет отвечать за хранение всех аудиофайлов, поэтому в основном мы создадим корзину для каждой книги и вернем ее пользователю, тогда наш клиент будет знать, где искать аудио, после чего наша очередь разделит все файлы. страницы в книге и начнет создавать аудио.
Эти аудиозаписи будут сохранены в нужном сегменте, и мы уведомим клиента о том, что его файл готов к загрузке (вот почему у нас есть сокет).
Прикладной процесс
Вот диаграмма, которая поможет нам понять, как будет работать это приложение:
Итак, первое, что нужно сделать пользователю, это запрос со своим PDF-файлом, наш API проанализирует PDF-файл и проверит, все ли готово к обработке, если есть какая-либо ошибка, он отправит его обратно клиенту с кодом, связанным с ошибка, если все успешно наш API создаст новую корзину в нашем сервисе S3, отправит audiobook_id клиенту и отправит этот процесс в очередь.
Итак, теперь произойдут две вещи:
- Наш клиент будет использовать свой audiobook_id для подключения к нашему сокету.
- Rabbit MQ начнет преобразовывать PDF в аудиокнигу, как только этот процесс завершится, он отправит сообщение с правильным audiobook_id на наш сервер сокетов, а сервер сокетов отправит сообщение нашему клиенту, чтобы уведомить его о том, что его аудиокнига готова.
Итак, дело сделано, теперь клиент может скачать аудиокнигу и радоваться.
Заключение
Отлично, теперь у нас есть представление о том, как будет работать наше приложение, конечно, многое может обновиться, может быть, некоторые вещи, которые я ожидаю, не будут нужны, а другие могут быть, это нормально, это почти невозможно предсказать все, и мы должны быть готовы изменить ситуацию, если это необходимо.
Поэтому, если вы видите какую-либо ошибку в моем решении или у вас есть какие-либо сомнения, пожалуйста, добавьте комментарий ниже, он будет прочитан, и вы получите отзыв.
Следующая статья: Как настроить и структурировать свои приложения React Native?