Рубрики
Без рубрики

Как и почему я построил службу синхронизации государства в реальном времени

Как и почему я построил службу синхронизации государства в реальном времени

Автор оригинала: Peter Mbanugo.

Приложения в реальном времени везде. Из приложений обмена мгновенными сообщениями до документирования программного обеспечения для совместной работы и игр. Возможно, вы построили приложения с ними используя библиотеку с открытым исходным кодом, такие как Signalr, Socketio или некоторые другие коммерческие продукты. Я использовал Signalr и Socketio и самое недавно строительство Чат SDK С Socketio в последнем выставке Hackhothon.

Проблема, которую я хотел решить

Я и некоторые коллеги должны были разработать государственную логику вокруг двигателей в реальном времени, как Socketio и Signalr в прошлом. Большую часть времени это проект, который нуждается в приборной панели в реальном времени. Эти реализации имели аналогичную логику или архитектуру, и она чувствовала, что произошло повторяющиеся усилия для всегда проектирования с нуля. Я хотел, чтобы я мог:

  1. Добавьте синхронизацию состояния в реальном времени в любое приложение с легкостью.
  2. Избегайте проектирования с нуля вокруг комнат и событий Socketio, а также обрабатывая, что происходит, когда клиент отключается и воссоединяется.
  3. SDK, который я могу интегрировать в мобильные и веб-приложения.
  4. Сервис, который обрабатывает проблемы инфраструктуры.

Что я построил

Так что я построил Hamoni Sync Синхронизация состояния в реальном времени в качестве обслуживания.

Он предоставляет SDK для добавления синхронизации состояния в реальном времени в Интернет или мобильный. Я сделал только веб SDK на данный момент. Он сохраняет состояние вашего приложения в облаке и может служить источником истины для вашего приложения. Он повторно синхронизирует с сервером, когда клиент отсоединяется.

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

Tech Stack.

В здании этого я использовал Reactjs, Nodejs, Rollup, Socketio, Couchdb, AWS Lambda, AWS API Gateway, Amazon Cognito, AWS Amplify, AWS ElecastalBeanstalk, Gitbook, Git.

  1. Контроль источника : Я использую Git и Gitlab. Я использую GitLab, потому что бесплатный план позволяет мне иметь частные репозитории.

  2. База данных : Мне нужен был NoSQL и выбрал CouchDB, потому что у него есть стратегия разрешения конфликта, которую я хочу позже использовать для обработки автоматического разрешения конфликта для этого проекта. Я использую экземпляр управляемого CouchDB из IBM Cloudant, потому что я не хочу сами управлять базой данных.

  3. Backend : Есть пара двигателей в реальном времени с открытым исходным кодом, а Sockeio, кажется, более популярны. Я выбрал Socketio, потому что я знаком с Socketio, и у него есть клиентские библиотеки для Swift и Java, которые я хочу использовать в здании SDK на этих языках, поэтому мое решение может работать на мобильном телефоне. Я также использую AWS Lambda и Gateway API, чтобы создать API, используемые приборной панелью. Я предполагал, что у меня будет разное требование к масштабированию для системы в реальном времени и API, поэтому я не хотел их иметь на одном сервере. Я их отделил и использовал безсетевую архитектуру, потому что для экономии стоимости.

  4. Frontend : Я использую реагирование с компонентами дизайна материала из MDB Bootstrap Отказ Я подумал о том, чтобы использовать PREACT, но решил на реакцию, потому что AWS Amplify имеет интеграционный пакет для реагирования, и мне нужно использовать его для управления логикой аутентификации для веб-приложения. Это может работать с PREACT, но я не хотел инвестировать время в попытке увидеть, работает ли это.

  5. Аутентификация : Я использую Amazon Cognito и AWS Amplify. Amazon Cognito для управления учетной записью пользователей и усиление в качестве библиотеки для обработки аутентификации в приложении RACT. Это был бриз, используя эти услуги.

  6. Документация Я строю услугу с SDK, поэтому ему нужно иметь хорошую документацию. Я спросил людей в Wealjs Slack Group, и они дали мне варианты. Один из них пошел вперед и сделал Список инструмент рассматривать. Я должен был выбрать между GitBook , Сфинкс и Шифер Отказ SPHINX требовал мне установки инструментов, которые я не использую, и я не то, что на данный момент выучить реструктурированный текстовый формат. GitBook и Slate Support Markdown, с которой я знаком. Я использовал GitBook, потому что мне нравится, как он отображается и позволяет мне применить темы. Я думаю, что в моем следующем проекте попробую Slate, потому что он прост в использовании и настройке.

  7. Облачный провайдер : Я использую AWS, потому что у меня осталось несколько кредитов на моем аккаунте. Я также использую IBM Cloudant в качестве управляемого провайдера баз данных.

  8. Хостинг : Я приобрел домен из Get.Tech и прохождение сайта, документации и приборной панели, используя NetLify.

  9. SDK Упаковка : Я написал свой код в ES6 и использовал Babel, чтобы транспортировать до ES5. Я использовал шатать, чтобы свернуть его для использования в браузерах. Я думаю, что документация Rollup позволяет легко начать работать, и она лучше всего подходит для авторов библиотеки для упаковки их библиотеки. Я не помню, что это легко для меня в первый раз, когда я попробовал WebPack.

Процесс строительства

Я начал работать над проектом 1 марта с целью завершения всего и запускаться 23 марта. Это всего 20 дней, потому что я не работаю по воскресеньям.

Я начал с помощью приборной панели. Bootstrapped Frestend с Create-React-App и библиотекой React Project Design. Добавлена аутентификация с Amazon Cognito и AWS Amplify. Затем я создал функции лямбда, выставленные через шлюз API для создания и просмотра приложений.

Отделка, что я переехал на работу на JavaScript SDK и Backend. Я закодировал первую функцию, которая позволила создать то, что я назвал примитивным значением. Потребовалось около 8 часов, чтобы построить, что затем облегчило остальную часть целевых функций. По состоянию на 10 марта у меня уже есть предполагаемые функции, работающие.

С помощью основных функций, работающих, следующее было создание образца приложения и документации для руководства людей о том, как использовать продукт. Мне потребовалось пару дней, чтобы закончить первоначальный проект документации. К 17 марта я закончил документацию и сделал 2 образца приложения. Письменный код, казалось, был легкой частью. Письменная документация взяла немного дольше, чем я планировал. С прогрессом в этот момент, что осталось, было развертывание до производства. Я купил домен и развернул веб-сайт и приборную панель, используя NetLify. Затем я закончил развертывание AWS и публикацию на NPM.

Проблемы я столкнулся

Тяжелая часть этого путешествия нашел правильные слова, чтобы передать намерение проекта через документацию и веб-сайт. Также было трудно обучение и использование услуг AWS, которые я использовал для этого проекта. AWS Cognito и усиление не было трудно использовать, но другие были. Может быть, документация была трудна для меня, чтобы следовать.

Назначение ключей

Ключевое обучение знало, как использовать различные услуги AWS. Мне также пришлось научиться использовать шаблон для упаковки модуля JavaScript и как развернуть в NPM. Если бы я сделаю все возможное, это будет использование различного компонента реагирования для дизайна материала и, вероятно, используя сланца для документации.

Окончательные мысли и следующие шаги

Путешествие было весело, и я многому научился. Я с нетерпением жду встречи с тем, как этот проект вылетает. Я продолжу работу над этим, потому что у меня есть другие функции, запланированные для него, например, позволяют пользователям видеть текущее количество подключений для приложения. Я надеюсь получить отзыв и посмотреть, как люди используют его и какие функции они хотели бы видеть добавленные или удаленные.

Попробуйте и дайте свое приложение в реальном времени Boost! Не стесняйтесь связаться и дайте мне знать, что вы думаете.

Оформить заказ в этом сообщении в блоге, чтобы узнать, как создать приложение для голосования в реальном времени с ним в JavaScript

Ссылки