РЕАЛИЗАЦИЯ TCP-СОЕДИНЕНИЯ НА ОСНОВЕ ТЕХНОЛОГИИ РЕАКТИВНОГО ПРОГРАММИРОВАНИЯ - Студенческий научный форум

IX Международная студенческая научная конференция Студенческий научный форум - 2017

РЕАЛИЗАЦИЯ TCP-СОЕДИНЕНИЯ НА ОСНОВЕ ТЕХНОЛОГИИ РЕАКТИВНОГО ПРОГРАММИРОВАНИЯ

Маркин Е.И., Рябова К.М., Воронцов А.А.
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
о время разработки приложений, работающих с удаленным сервером, часто приходится реализовывать TCP-соединение с сервером для передачи данных. Одним из способов упрощения реализации данной задачи может быть использование реактивного подхода к программированию. Реактивное программирование основано на работе с потоками данных. Самый простой способ реализации TCP-соединений может выглядеть так как показано на рис. 1.

Рис. 1 – Пример реализации TCP-соединения.

В приведенном коде connect() - создает java.net.Socket и подключается к серверу, sendBytes() пишет в output-поток сокета, readAnswer() читает из input-потока сокета.

Данный код имеет ряд недостатков, а именно: блокировка записи/чтения, неудобная обработка ошибок и т.д.. Эти и другие проблемы можно решить при помощи RxJava.

RxJava - это библиотека, базирующаяся на технологии ReactiveX (Rx) с открытым исходным кодом, которая изначально разрабатывалась компанией Netflix. Она позволяет быстро и без затруднений писать реактивный код.

Приведенный выше код, написанный с использованием RxJava будет выглядеть как показано на рис. 2.

Рис. 2 – Пример TCP-соединения с использованием RxJava. Отличие данного кода заключаются в том, что теперь метод send() возвращает Observable, а не String. Т.е. в результате мы получаем поток с данными, на который нам нужно подписаться при помощи Subscribe и в нем указать, что нужно делать с данными и ошибками.

Для обработки ошибок в RxJava предусмотрены операторы: doOnError(), onErrorReturn(), onErrorResumeNext(), onExceptionResumeNext(), данные операторы собирают ошибки, которые возникают во время выполнения операторов и передают их в обработчик исключений в subscribe(). Оператор retry() повторяет попытку обработки данных n-е количество раз во время получения ошибки. Добавив данные операторы, получаем следующий (рис. 3).

Рис. 3. – Код TCP-соединения с добавлением операторов для обработок ошибок.

Для вынесения выполнения данной задачи в отдельный поток существуют операторы: observeOn() и subscribeOn(). subscribeOn()- переносит выполнение всех операторов, которые указаны выше него, в указанный поток. observeOn() - переносит выполнение операторов, находящихся ниже него, в указанный поток. Комбинирование данных операторов позволяет легко и быстро переключаться между разными потоками (рис. 4).

Рис. 4 - Код TCP-соединения с добавлением операторов для переключения между потоками.

Подводя итог можно сделать вывод, что использование Rx в разработке повышает устойчивость работы программы к багам и непредвиденным ошибкам, код становится более читаемым, гибким и имеет высокие возможности для расширения.

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

Список литературы

  1. Introduction to Rx / Lee Campbell. - 2012.-354c.

  2. Официальный сайт ReactiveX: портал [Электронный ресурс] . -Режим доступа: http://reactivex.io/ свободный. – Загл. с экрана.

  3. Манифест реактивного программирования: портал [Электронный ресурс] . -Режим доступа: http://www.reactivemanifesto.org/ свободный. – Загл. с экрана.

  4. Маркин Е.И. мобильная разработка для абитуриентов / Е.И. Маркин, К.М. Рябова, А.Н. Пименов, Н.А. Левина, А.А. Воронцов // Сборник статей VI международной НПК “Наука и образование: сохраняя прошлое, создаём будущее”. Пенза: "Наука и Просвещение" . 2016. С. 30-32.

  5. Маркин Е.И. Технология реактивного программирования / Е.И. Маркин, К.М. Рябова, А.Н. Пименов, Н.А. Левина, А.А. Воронцов // Cборник статей победителей IV международной НПК “Инновационные научные исследования: теория, методология, практика” . Пенза: "Наука и Просвещение". 2016. С. 44-47.

  6. Маркин Е.И. Использование технологии реактивного программирования при работе с геолокацией. /Е.И. Маркин, К.М. Рябова, А.Н. Пименов, Н.А. Левина, А.А. Воронцов// Cборник статей победителей VI Международной НПК “WORLD SCIENCE: PROBLEMS AND INNOVATIONS”. Пенза: "Наука и Просвещение". 2016. С. 86-89.

Просмотров работы: 265