Как сетевое программирование представлено в Ruby
В этой статье мы собираемся изучить следующие темы:
- библиотека
socket
- библиотека
net
Прежде, чем начать
Позвольте мне представить здесь платформу, которая помогла мне изучить большую часть моих знаний о Ruby. Действительно, Pluralsight - потрясающая платформа.
С 50+ курсами, которые охватывают различные темы по Ruby и Ruby on Rails, это лучший способ поднять свои знания на новый уровень!
Попробуйте бесплатно 👇😉
Спасибо за уделенное время!
Вступление
В то время коммуникация через компьютеры имела важное значение для развития компьютерных наук в мире.
Действительно, это позволило нам:
- обмениваться информацией (чат, почта и т. д.)
- обмениваться файлами (FTP и т. д.)
- распространять идею, мнение, сообщение (Интернет, ..)
- создавать новые возможности для бизнеса
В этой статье мы увидим, как Ruby реализовал сетевое программирование в своих библиотеках Core и Standard.
Библиотека сокетов
Во-первых, если вы не знаете, что такое сокет:
Сокеты - это конечные точки двунаправленного канала связи.
Сокеты могут обмениваться данными внутри процесса, между процессами на одной машине или между разными машинами.
Библиотека socket
отвечает за предоставление доступа к различным видам существующих сокетов:
- TCP-сокет - через класс
TCPSocket
- UDP-сокет - через класс
UDPSocket
- Сокет UNIX - через класс
UnixSocket
- так далее..
Эта библиотека является частью стандартной библиотеки Ruby.
В Ruby корневым классом любого Socket
является класс BasicSocket
Этот класс наследуется от IO
.
Класс IO
отвечает за обработку потоков I nput и O utput - как экземпляр File
, $stdin
, $stdout
или $stderr
.
Это означает, что наш socket
интерпретируется как поток ввода-вывода.
Кроме того, класс BasicSocket
предоставляет набор методов для доступа к свойствам socket
и несколько методов для чтения и записи через сокет, например блокирующий и неблокирующий read
. и write
.
TCPSocket
, UDPSocket
& UNIXSocket
классы являются производными от BasicSocket
.
Фактически, TCPSocket
& UDPSocket
происходит от IPSocket
, которое происходит от BasicSocket
.
Все они используют процедуры, определенные в BasicSocket
, и реализуют протокол, связанный с их типом сокета:
- протокол
TCP
дляTCPSocket
- протокол
UDP
дляUDPSocket
- механизм
IPC
дляUNIXSocket
Библиотека socket
отвечает за обработку низкоуровневой связи через Интернет-протокол (UDP и TCP) и механизм Межпроцессного взаимодействия.
Теперь давайте посмотрим, как Ruby реализует протоколы высокого уровня, такие как HTTP
, IMAP
, SMTP
и FTP
.
Библиотека net
Библиотека net
отвечает за реализацию протоколов высокого уровня.
Поддерживаемые протоколы: FTP
, HTTP
, IMAP
, POP
иSMTP
.
Мы видим, что все эти протоколы реализованы в определенном классе в пространстве имен Net
.
Кроме того, эти классы являются производными от класса Net::Protocol
.
Давайте посмотрим на содержание этого курса
Класс Net::Protocol
наследуется от Object
- унаследованного класса по умолчанию в Ruby.
Не стесняйтесь читать мою статью о
Ruby Object Model
, если вы не знакомы с классомObject
в Ruby.
Он также реализует метод класса protocol_param
, который используется для определения ожидаемых параметров протокола.
Это очень легкий объект.
В противном случае, требование библиотеки net/protocol
добавляет немного больше, чем этот корневой класс.
Не стесняйтесь читать
Requiring a file or library in Ruby
, если вы не знакомы сKernel#require
методом в Ruby.
Действительно, в дополнение к классу Net::Protocol
библиотека net/protocol
:
- добавляет набор классов ошибок.
- требует других библиотек, необходимых протоколам, например библиотеки
socket
. - добавляет набор классов для управления операциями чтения / записи через сокеты -
BufferedIO
,WriteAdapter
и т. д.
Таким образом, класс, производный от Net::Protocol
, просто обеспечивает реализацию данного протокола и обрабатывает ошибки и операции потока ввода-вывода с помощью инструментов, предоставляемых библиотекой net/protocol
.
Заключение
Поскольку Ruby является полностью объектно-ориентированным языком программирования, при реализации сетевого программирования используются все инструменты, предоставляемые этими языками, такие как пространство имен, наследование, корневой класс, обработка ошибок, включение функций (ключевое слово require
).
Также Ruby реализует сетевые протоколы низкого и высокого уровня в двух разных библиотеках: socket
и net/*
.
Наконец, вы можете легко реализовать новый протокол, пользуясь абстракцией, предоставляемой Ruby - путем наследования BasicSocket
или Net::Protocol
в зависимости от ваших потребностей.
Вуаля!
Спасибо, что нашли время прочитать этот пост :-)
Не стесняйтесь 👏 и поделитесь этой статьей, если она была для вас полезна. 🚀
Кроме того, поскольку я публикую статью каждые 3 дня, не стесняйтесь подписываться на меня, чтобы получать уведомления о выпусках моих новых статей.
Вот ссылка на мою последнюю статью: