Однажды я пролистывал хронику твиттера и наткнулся на этот твит: «Мы уже отправили человека на Луну. Почему у нас нет приложения для чтения 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?