Как сетевое программирование представлено в 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 дня, не стесняйтесь подписываться на меня, чтобы получать уведомления о выпусках моих новых статей.

Вот ссылка на мою последнюю статью:

Inheritance on-the-fly with Ruby on Rails