Розетка спутниковая (SAT), телевизионная (TV) проходная GSL000898 двойная, серии Glossa Schneider Electric, цвет шоколад
Каталог серии
Розетки GLOSSA Выключатели Glossa Светорегуляторы Glossa Терморегуляторы Glossa Рамки Glossa
Розетки USB GLOSSA Розетки телефонные и интернет Glossa Розетки для TV, спутника, радио Glossa Кнопки без фиксации Glossa
Показать весь каталог
Товар может иметь незначительные отличия от изображения, представленного на сайте, по цвету, форме, размеру или другим параметрам.
1042 Р Срок поставки: 1-2 недели
В корзину В корзине
Посмотреть все характеристики
Цвет: | шоколад |
Материал: | пластмасса |
Вид розетки: | спутниковая (SAT), телевизионная (TV) |
Тип розетки: | проходная |
Разъемы: | двойная |
Комплектация: | механизм с накладкой без рамки |
Монтаж: | встроенный монтаж, с возможностью накладного монтажа |
Обратите внимание:
Докомплектовать
Рамки
Рамка квадратная 1 пост шоколадного цвета
арт. GSL000801
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 1 пост |
В корзину В корзине
Рамка прямоугольная 2 поста в шоколадном цвете
арт. GSL000802
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 2 поста |
В корзину В корзине
Рамка прямоугольная 2 поста в шоколадном цвете
арт. GSL000806
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 2 поста |
В корзину В корзине
Рамка прямоугольная 3 поста в шоколадном цвете
арт. GSL000803
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 3 поста |
В корзину В корзине
Рамка прямоугольная 3 поста в шоколадном цвете
арт. GSL000807
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 3 поста |
В корзину В корзине
Рамка прямоугольная 4 поста в шоколадном цвете
арт. GSL000808
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 4 поста |
В корзину В корзине
Рамка прямоугольная 4 поста в шоколадном цвете
арт. GSL000804
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 4 поста |
В корзину В корзине
Рамка прямоугольная 5 постов в шоколадном цвете
арт. GSL000805
Производ.: | Schneider Electric |
Серия: | Glossa |
Цвет: | шоколад |
Материал: | пластмасса |
Кол-во постов: | 5 постов |
В корзину В корзине
Трудно с выбором?
Наши специалисты подберут для вас лучшие комплектации
Отправить заявку
Прикрепить файл
Нажимая кнопку «Отправить» Вы даете согласие на обработку ваших персональных данных.
Наверх
Проходная розетка для интернета в категории «Материалы для ремонта»
Розетка компьютерная Viko Karre RJ 45 белая
На складе в г. Кривой Рог
Доставка по Украине
146.50 грн
Купить
Розетка TV телевизионная Karlik LOGO 1LGTV-1 бежевая внутренняя конечная (гнездо для ТВ антенны)
На складе
Доставка по Украине
177.5 — 200 грн
от 2 продавцов
197.20 грн
177.50 грн
Купить
Розетка TV телевизионная Karlik LOGO LGTV-1 белая внутренняя конечная (гнездо для ТВ антенны)
На складе
Доставка по Украине
177.5 — 200 грн
от 2 продавцов
197.20 грн
177.50 грн
Купить
Розетка TV телевизионная Karlik MINI MGTV-1 белая внутренняя конечная (гнездо для ТВ антенны)
На складе
Доставка по Украине
204.8 — 240 грн
от 2 продавцов
227.60 грн
204.80 грн
Купить
Розетка TV телевизионная Karlik MINI 29MGTV-1 золотая внутренняя конечная (гнездо для ТВ антенны)
На складе
Доставка по Украине
240 — 254. 2 грн
от 2 продавцов
282.40 грн
254.20 грн
Купить
Розетка TV телевизионная Karlik MINI 12MGTV-1 черная матовая внутренняя конечная (гнездо для ТВ антенны)
На складе в г. Луцк
Доставка по Украине
282.40 грн
254.20 грн
Купить
Розетка для радио Auna Digi Plug FM черная
Доставка по Украине
2 200 грн
Купить
Розетка для телевизионного кабеля проходная ТВ OVIVO GRANO глянцевая белая
Доставка по Украине
105.78 грн
Купить
Проходная розетка для кабеля ТВ Ovivo Electric Mina для внутренней установки белая
Доставка по Украине
105.78 грн
Купить
Розетка для телевизионного кабеля ТВ проходная встраиваемая Horoz Electric TINA белая
Доставка по Украине
49.61 грн
Купить
Спутниковая розетка Ovivo Electric Grano 250V 16A IP20 для скрытой установки белая
Доставка по Украине
73.80 грн
Купить
Розетка накладная компьютерная интернет Viko Carmen
На складе в г. Кривой Рог
Доставка по Украине
112.47 грн
Купить
Удлинитель для офиса GTV на 3 розетки SCHUCKO с заземлением, USB, аудио, интернет выход алюминий
Под заказ
Доставка по Украине
1 658.80 грн
Купить
Накладка для розетки TV Merten D-Life MTN4123-6033 Сахара
На складе в г. Львов
Доставка по Украине
466.13 грн
Купить
Накладка для розетки TV Merten D-Life MTN4123-6034 Антрацит
На складе в г. Львов
Доставка по Украине
524.63 грн
Купить
Смотрите также
Накладка для розетки TV Merten D-Life MTN4123-6035 Белый лотос
На складе в г. Львов
Доставка по Украине
187.20 грн
Купить
Накладка для розетки TV Merten D-Life MTN4123-6036 Нержавеющая сталь
На складе в г. Львов
Доставка по Украине
524. 63 грн
Купить
Накладка для розетки TV Merten D-Life MTN4123-6050 Никель
На складе в г. Львов
Доставка по Украине
1 749.85 грн
Купить
Накладка Schneider Merten D-Life белый лотос для механизма интернет розетки RJ45 (MTN4521-6035)
Доставка по Украине
350 грн
Купить
Накладка Schneider Merten D-Life белый лотос для механизма интернет розетки двойная RJ45 (MTN4522-6035)
Доставка по Украине
380 грн
Купить
Накладка Schneider Merten D-Life сахара для механизма интернет розетки RJ45 (MTN4521-6033)
Доставка по Украине
408 грн
Купить
Накладка Schneider Merten D-Life сахара для механизма интернет розетки двойная RJ45 (MTN4522-6033)
Доставка по Украине
438 грн
Купить
Накладка Schneider Merten D-Life сахара для механизма 2-х модульной интернет розетки SE (MTN4574-6033)
Доставка по Украине
992 грн
Купить
Накладка для розетки TV Merten D-Life MTN4123-6051 Шампань
На складе в г. Львов
Доставка по Украине
1 749.85 грн
Купить
Накладка для розетки TV Merten D-Life MTN4123-6052 Мокко
На складе в г. Львов
Доставка по Украине
1 749.85 грн
Купить
Накладка Schneider Merten D-Life сахара для механизма 2-х модульной интернет розетки RJ45 (MTN4572-6033)
Доставка по Украине
1 050 грн
Купить
Накладка Schneider Merten D-Life сталь для механизма интернет розетки RJ45 (MTN4521-6036)
Доставка по Украине
466 грн
Купить
Накладка Schneider Merten D-Life сталь для механизма интернет розетки двойная RJ45 (MTN4522-6036)
Доставка по Украине
496 грн
Купить
Накладка Schneider Merten D-Life сталь для механизма 2-х модульной интернет розетки (MTN4574-6036)
Доставка по Украине
1 050 грн
Купить
Что такое интернет-сокет? (с изображением)
`;
Интернет
Факт проверен
С. А. Киль
Интернет-сокет — это термин, используемый для обозначения точки подключения, которую любая компьютерная программа может использовать для передачи данных через Интернет. Они не являются физической конструкцией, как электрическая розетка, а представляют собой концепцию компьютерного программного обеспечения. С таким сокетом любые необходимые данные могут перемещаться туда и обратно от программы, работающей на одном компьютере, к программе, работающей на другом; во многих случаях это к и от клиента и сервера. Этот термин также используется для обозначения интерфейса прикладного программирования (API), который программисты могут использовать для создания таких сетевых приложений, способных отправлять и получать данные через Интернет.
Таким образом, существует три основных типа интернет-сокетов. Одним из таких типов является сокет дейтаграммы. Это быстрое соединение через сокет, не требующее дополнительной связи для установления выделенного соединения перед отправкой пакетов данных. По этой причине их часто называют сокетами без установления соединения, и в качестве транспортного протокола они используют UDP. Это что-то вроде метода «выстрелил и забыл», в котором нет проверки последовательности пакетов или исправления ошибок.
Вам также может понравиться
Рекомендуется
КАК ПОКАЗАНО НА:
Программирование сетевых сокетов — документация Idris 1.3.3
-
Готов
, исходное состояние -
Bound
, что означает, что он был привязан к адресу, готовому для входящих соединения -
Прослушивание
, что означает прослушивание входящих соединений -
Open
, что означает готовность к отправке и приему данных; -
Закрыт
, что означает, что он больше не активен.
На следующей диаграмме показано, как операции, предоставляемые API, изменяют
состояние, где Готов
— начальное состояние:
Если соединение Open
, то мы также можем отправить
сообщение на
другой конец соединения и recv
сообщений от него.
Пакет contrib
содержит модуль Network.Socket
, который
предоставляет примитивы для создания сокетов и отправки и получения
Сообщения. Он включает следующие функции:
bind : (sock : Socket) -> (addr : Maybe SocketAddress) -> (port : Port) -> IO Int connect : (sock : Socket) -> (addr : SocketAddress) -> (port : Port) ->IO ResultCode слушать: (носок: сокет) -> IO Int accept: (sock: Socket) -> IO (либо SocketError (Socket, SocketAddress)) send : (sock : Socket) -> (msg : String) -> IO (либо код результата SocketError) recv : (sock : Socket) -> (len : ByteLength) -> IO (либо SocketError (String, ResultCode)) закрыть: сокет -> ввод-вывод ()
Эти функции охватывают переходы состояний на диаграмме выше, но никто из них не объясняет, как операции влияют на состояние! Это прекрасно можно, например, попытаться отправить сообщение на сокет, который еще не готов, или попытаться получить сообщение после закрытия сокета.
Используя ST
, мы можем предоставить лучший API, который точно объясняет, как
каждая операция влияет на состояние соединения. В этом разделе мы
определить API сокетов, а затем использовать его для реализации «эхо-сервера», который
отвечает на запросы от клиента, возвращая одно отправленное сообщение
клиентом.
Определение интерфейса
Sockets
Вместо использования IO
для низкоуровневого программирования сокетов мы реализуем
интерфейс с использованием ST
, который точно описывает, как каждая операция
влияет на состояние сокетов и описывает, когда сокеты создаются
и удалено. Мы начнем с создания типа для описания абстрактного состояния.
сокета:
data SocketState = Ready | Связанный | Прослушивание | Открыть | Закрыто
Затем мы начнем определять интерфейс, начиная с Носок
тип
для представления сокетов, параметризованных их текущим состоянием:
interface Sockets (m : Type -> Type), где Носок: SocketState -> Тип
Сокеты создаем методом socket
. SocketType
Stream
, что указывает на
TCP-сокет.сокет: SocketType -> ST m (либо () Var) [addIfRight (Sock Ready)]
Помните, что addIfRight
добавляет ресурс, если результат операции
имеет вид Right val
. По соглашению в этом интерфейсе мы будем использовать Либо
для операций, которые могут потерпеть неудачу, независимо от того, могут ли они выполняться
любую дополнительную информацию об ошибке, чтобы мы могли последовательно
используйте addIfRight
и некоторые другие функции уровня типа.
Чтобы определить сервер, после того, как мы создали сокет, нам нужно связать
его
в порт. Мы можем сделать это с помощью bind
метод:
bind : (sock: Var) -> (addr: возможно, SocketAddress) -> (port: Port) -> ST m (либо () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Bound)]
Привязка сокета может завершиться ошибкой, например, если сокет уже существует
привязан к данному порту, поэтому он снова возвращает значение типа или
. Действие здесь использует функцию уровня типа или
и говорит, что:
- 0040 Носок закрыт состояние
- Если
bind
завершается успешно, сокет переходит в состояниеSock Bound
, как показано на схеме выше
или
реализуется следующим образом:
или : a -> a -> либо b c -> a или x y = либо (const x) (const y)
Таким образом, тип bind
может быть эквивалентно записан как:
bind : (sock : Var) -> (addr : Maybe SocketAddress) -> (port : Port) -> STrans m (Или () ()) [носок ::: Носок готов] (либо [sock ::: Sock Closed] [sock ::: Sock Bound])
Однако использование или
гораздо более лаконично, чем это, и попытки
отражать диаграмму переходов состояний как можно более прямо, оставаясь при этом
улавливание возможности неудачи.
После того, как мы привязали сокет к порту, мы можем начать прослушивание подключений от клиентов:
слушать : (sock : Var) -> ST m (Either () ()) [sock ::: Sock Bound :-> (Sock Closed `или` Sock Listening)]
Сокет в состоянии Listening
готов принимать соединения от
индивидуальные клиенты:
принять : (носок : Var) -> ST m (Либо () Var) [sock ::: Sock Listening, addIfRight (Sock Open)]
Если есть входящее соединение от клиента, принять
добавляет новый ресурс в конец списка ресурсов (по соглашению рекомендуется
добавить ресурсы в конец списка, потому что это работает более аккуратно
с обновить с
, как обсуждалось в предыдущем разделе). Итак, мы сейчас
иметь два сокета : один продолжает прослушивать входящие соединения,
и один готов к общению с клиентом.
Нам также нужны методы для отправки и получения данных на сокете:
send : (sock : Var) -> String -> ST m (Или () ()) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)] recv : (носок : Var) -> ST m (либо () строка) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)]
Как только мы закончим общение с другой машиной через сокет, мы
хочу закрыть
соединение и удалить сокет:
close : (sock : Var) -> {auto prf : CloseOK st} -> ST m () [sock ::: Sock st :-> Sock Closed] удалить : (носок : Var) -> ST m () [Удалить носок (Sock Closed)]
У нас есть предикат CloseOK
, используемый close
в неявном доказательстве
аргумент, который описывает, когда можно закрыть сокет:
data CloseOK : SocketState -> Type where ЗакрытьОткрыть : ЗакрытьОК Открыть CloseListening : CloseOK Прослушивание
То есть мы можем закрыть сокет который Открыть
, разговаривая с другой машиной,
что приводит к прекращению связи. Мы также можем закрыть сокет, который
is Прослушивание
для входящих подключений, что приводит к остановке сервера
прием запросов.
В этом разделе мы реализуем сервер, но для полноты картины мы можем
также хочу, чтобы клиент подключался к серверу на другом компьютере. Мы можем
это с connect
:
connect: (sock: Var) -> SocketAddress -> Port -> ST m (Или () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Open)]
Для справки, вот полный интерфейс:
Интерфейс Сокеты (m : Тип -> Тип), где Носок: SocketState -> Тип socket : SocketType -> ST m (Ither () Var) [addIfRight (Sock Ready)] bind: (sock: Var) -> (addr: возможно, SocketAddress) -> (port: Port) -> ST m (либо () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Bound)] слушать : (носок : Вар) -> ST m (Either () ()) [sock ::: Sock Bound :-> (Sock Closed `или` Sock Listening)] принять : (носок : Var) -> ST m (Either () Var) [sock ::: Sock Listening, addIfRight (Sock Open)] connect: (sock: Var) -> SocketAddress -> Port -> ST m (Или () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Open)] close : (sock : Var) -> {auto prf : CloseOK st} -> ST m() [носок ::: Носок st :-> Носок Закрыт] remove : (sock : Var) -> ST m () [Удалить носок (Sock Closed)] отправить: (носок: Var) -> строка -> ST m (Или () ()) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)] recv : (носок : Var) -> ST m (либо () строка) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)]
Вскоре мы увидим, как это реализовать; в основном методы могут быть реализованы
в IO
, напрямую используя API необработанных сокетов. Хотя сначала посмотрим
как использовать API для реализации «эхо-сервера».
Внедрение «эхо-сервера» с
сокетами
На верхнем уровне наш эхо-сервер начинается и заканчивается без доступных ресурсов,
и использует интерфейсы ConsoleIO
и Sockets
:
startServer : (ConsoleIO m, Sockets m) => ST m () []
Первое, что нам нужно сделать, это создать сокет для привязки к порту
и прослушивание входящих соединений с использованием сокета
. Это может потерпеть неудачу,
поэтому нам нужно иметь дело со случаем, когда он возвращает Right sock
, где sock
— это новая переменная сокета, или где она возвращает Left err
:
startServer : (ConsoleIO m, Sockets m) => ST m () [] стартовый сервер = do Right sock <- socket Stream | Левая ошибка => чистая () ?что теперь
Рекомендуется реализовать эту функцию интерактивно, шаг за шагом.
шаг, используя отверстия, чтобы увидеть, в каком состоянии находится вся система после каждого
шаг. Здесь мы видим, что после успешного вызова сокета
мы
сокет доступен в состоянии Ready
:
sock : Var m : Тип -> Тип ограничение: ConsoleIO m ограничение1 : Сокеты m -------------------------------------- whatNow : STrans m () [sock ::: Sock Ready] (\result1 => [])
Далее нам нужно привязать сокет к порту и начать слушать
связи. Опять же, каждый из них может выйти из строя. Если да, мы удалим
розетка. Сбой всегда приводит к тому, что сокет находится в состоянии Closed
,
поэтому все, что мы можем сделать, это удалить
it:
startServer : (ConsoleIO m, Sockets m) => ST m () [] стартовый сервер = do Right sock <- socket Stream | Левая ошибка => чистая () Правильно ок <- привязать носок Ничего 9442 | Левая ошибка => удалить носок Правильно ок <- слушать носок | Левая ошибка => удалить носок ?runServer
Наконец, у нас есть сокет, который прослушивает входящие соединения:
ok : () носок : Вар хорошо1 : () m : Тип -> Тип ограничение: ConsoleIO m ограничение1 : Сокеты m -------------------------------------- runServer: STrans m () [sock ::: Sock Listening] (\результат1 => [])
Мы реализуем это в отдельной функции. Тип runServer
сообщает нам, каким должен быть тип echoServer
(отмечая, что нам нужно
дать m
аргумент для Sock
явно):
echoServer : (ConsoleIO m, Sockets m) => (sock : Var) -> ST m () [удалить носок (Sock {m} Listening)]
Мы можем завершить определение startServer
следующим образом:
startServer : (ConsoleIO m, Sockets m) => ST m () [] стартовый сервер = do Right sock <- socket Stream | Левая ошибка => чистая () Правильно ок <- привязать носок Ничего 9442 | Левая ошибка => удалить носок Правильно ок <- слушать носок | Левая ошибка => удалить носок носок эхосервера
В echoServer
мы продолжим принимать запросы и отвечать на них
пока что-то не выйдет из строя, после чего мы закроем сокеты и
возвращаться. Начнем с попытки принять входящее соединение:
echoServer : (ConsoleIO m, Sockets m) => (sock : Var) -> ST m () [удалить носок (Sock {m} Listening)] носок эхо-сервера = делать правильно новый <- принять носок | Левая ошибка => закрыть носок; снять носок ?что теперь
Если принять
не удается, нам нужно закрыть Прослушивание сокета
и
удалите его перед возвратом, потому что тип echoServer
требует
это.
Как всегда, постепенное внедрение echoServer
означает, что мы можем проверить
состояние, в котором мы находимся, когда мы развиваемся. Если принять
успешно, мы имеем
существующий sock
, который все еще прослушивает соединения, и новый
сокет, который открыт для связи:
новый : Var носок : Вар m : Тип -> Тип ограничение: ConsoleIO m ограничение1 : Сокеты m -------------------------------------- whatNow: STrans m () [sock ::: Sock Listening, новый ::: Sock Open] (\результат1 => [])
Для завершения echoServer
мы получим сообщение на новый
socket и повторить его обратно. Когда мы закончим, мы закроем новый сокет
,
и вернуться к началу echoServer
для обработки следующего
подключение:
echoServer: (ConsoleIO m, Sockets m) => (sock: Var) -> ST m () [удалить носок (Sock {m} Listening)] носок эхо-сервера = делать правильно новый <- принять носок | Левая ошибка => закрыть носок; снять носок Правильный msg <- recv новый | Левая ошибка => закрыть носок; снять носок; удалить новый Правильно ок <- отправить новый ("Вы сказали " ++ msg) | Левая ошибка => удалить новый; закрыть носок; снять носок закрыть новый; удалить новый; носок эхосервера
Реализация
Sockets
Чтобы реализовать Sockets
в IO
, мы начнем с указания конкретного типа
для носка
. Мы можем использовать API необработанных сокетов (реализованный в Network.Socket
) для этого и используйте Socket
, хранящийся в состоянии
, нет
независимо от того, в каком абстрактном состоянии находится сокет:
реализация Sockets IO, где Sock _ = сокет состояния
Большинство методов можно реализовать с помощью API сырых сокетов.
напрямую, возвращая Левый
или Правый
в зависимости от ситуации. Например,
мы можем реализовать socket
, bind
и listen
следующим образом:
socket ty = do Right sock <- lift $ Socket.socket AF_INET ty 0 | Левая ошибка => чистая (левая ()) lbl <- новый носок чистый (правильный фунт) bind sock addr port = do ok <- lift $ bind !(read sock) addr port если нормально /= 0 затем чистый (левый ()) иначе чисто (Правильно ()) listen sock = do ok <- lift $ listen !(read sock) если нормально /= 0 затем чистый (левый ()) иначе чисто (Правильно ())
Есть небольшая трудность с принять
, однако, потому что когда мы
используйте новый
, чтобы создать новый ресурс для открытого соединения, он появляется
в начале списка ресурсов, а не в конце. Мы можем увидеть это по
написание неполного определения, используя , возвращая
, чтобы увидеть, что
ресурсы должны быть, если мы вернем Right lbl
:
accept sock = do Right (conn, addr) <- lift $ accept !(read sock) | Левая ошибка => чистая (левая ()) фунт <- новый конн возвращение (правый фунт) ?fixResources
Удобно new
добавить ресурс в начало
список, потому что, как правило, это делает автоматическое построение доказательства с авто
-неявно проще для Идриса. С другой стороны, когда мы используем вызов
, чтобы сделать меньший набор ресурсов, обновление с
ставит заново
созданные ресурсы в конце списка, потому что в целом это уменьшает
объем повторного заказа ресурсов.
Если мы посмотрим на тип fixResources
, мы видим, что нам нужно сделать, чтобы закончить accept
:
_bindApp0 : Socket соединение : сокет адрес : SocketAddress носок : Вар фунт : вар -------------------------------------- fixResources: STrans IO () [lbl ::: State Socket, sock ::: State Socket] (\value => [sock ::: State Socket, lbl ::: State Socket])
Текущий список ресурсов заказан lbl
, sock
, и они нам нужны
быть в порядке носок
, фунтов
. Чтобы помочь в этой ситуации, Control.ST
предоставляет примитив toEnd
, который перемещает ресурс в
конец списка. Таким образом, мы можем завершить accept
следующим образом:
accept sock = do Right (conn, addr) <- lift $ accept !(читать sock) | Левая ошибка => чистая (левая ()) фунт <- новый конн возврат (справа фунт) (до конца фунт)
Для полной реализации Розетки
, взгляните на образцов/ST/Net/Network.idr
в дистрибутиве Idris. Вы также можете
найдите там полный эхо-сервер, EchoServer.idr
. Есть также
сетевой протокол более высокого уровня, RandServer.idr
, с использованием иерархии
конечные автоматы для реализации высокоуровневого сетевого протокола связи
с точки зрения API сокетов нижнего уровня. Это также использует многопоточность, чтобы
обрабатывать входящие запросы асинхронно. Вы можете найти более подробную информацию
о многопоточности и сервере случайных чисел в черновом документе
Конечные автоматы на всем пути вниз
Эдвин Брэди.