Реализация TCP-соединения на основе технологии реактивного программирования
Реализация TCP-соединения с сервером для передачи данных во время разработки приложений, работающих с удаленным сервером. Рассмотрение примера TCP-соединения с использованием RxJava. Код TCP-соединения с добавлением операторов для обработок ошибок.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 18.03.2019 |
Размер файла | 254,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Пензенский государственный технологический университет
РЕАЛИЗАЦИЯ TCP-СОЕДИНЕНИЯ НА ОСНОВЕ ТЕХНОЛОГИИ РЕАКТИВНОГО ПРОГРАММИРОВАНИЯ
Маркин Е.И., Рябова К.М., Воронцов А.А.
Во время разработки приложений, работающих с удаленным сервером, часто приходится реализовывать 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. 354 c.
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.
Размещено на Allbest.ru
Подобные документы
Сетевые соединения для передачи команд и данных между клиентом и сервером. Появление первых клиентских FTP-приложений. Графические пользовательские интерфейсы. Вход в FTP сервер. Настройка, подключение и вход в файловый сервер с клиентских компьютеров.
курсовая работа [2,6 M], добавлен 25.11.2014Обеспечение безопасности сетевого соединения. Процесс аутентификации при установке соединения и процесс передачи данных. Использование криптостойкого шифрования. Протокол аутентификации Kerberos. Основные этапы процедуры аутентификации клиента.
презентация [162,8 K], добавлен 10.09.2013Применение компьютерных сетей в организациях и частными лицами, аспекты их использования. Классификация по технологии передачи по различным признакам. Сетевое программное обеспечение. Службы на основе соединения и службы без установления соединения.
контрольная работа [1,0 M], добавлен 23.11.2011Подключение к серверу баз данных, основные функции. Использование PHP в сочетании с сервером Apache. Закрытие соединения, осуществляемое с помощью функции mysql_close. Обработка ошибок подключения к серверу. Создание таблицы, выполнение SQL-запроса.
презентация [130,8 K], добавлен 21.06.2014Изучение особенностей проектирования прикладных программ с помощь средств Visual Studio 2010 на языке C#. Расчет конического соединения, конусного градиента, усилия для разрыва соединения и требуемой силы сжатия. Реализация и тестирование программы.
курсовая работа [1,7 M], добавлен 19.02.2013Разработка API взаимодействия клиентских приложений с сервером СУБД через Pipe под Windows. Устройство и характеристики СУБД SQLite. Методы WinAPI для передачи данных. Реализация взаимодействия через PIPE. Результат работы серверного приложения.
курсовая работа [596,3 K], добавлен 09.05.2014Общие сведения о протоколе передачи данных FTP. Технические процессы осуществления соединения с помощью протокола FTP. Программное обеспечение для осуществления соединения с помощью протокола FTP. Некоторые проблемы FTP-серверов. Команды FTP протокола.
реферат [766,6 K], добавлен 07.11.2008Соединения и теоретико-множественные операции над отношениями. Операции выборки, проекции и декартово произведение. Операция соединения по двум отношениям. Построение вычисляемых полей. Запросы модификации данных. Основные ограничения для доменов полей.
презентация [281,4 K], добавлен 14.10.2013Задача и цели практики: модернизация сайта, разработка базы данных, отображающей время прихода и ухода сотрудников. Разработка формы представления данных на экране. Формирование данных, пригодных для вывода. Реализация технологии всплывающих подсказок.
отчет по практике [1,3 M], добавлен 16.09.2012Разработка клиент-серверного приложения на основе TCP\IP соединения. Организация работы удаленного генератора псевдослучайных последовательностей. Описание основных функциональных модулей. Интерфейс пользователя, сетевое взаимодействие и алгоритм.
курсовая работа [223,6 K], добавлен 18.10.2013