+7 495 120-13-73 | 8 800 500-97-74

(для регионов бесплатно)

Содержание

почему так нельзя делать, схема подключения

На чтение 6 мин Просмотров 4.8к. Опубликовано Обновлено

При разводке электрической системы в квартире применяют довольно популярный способ установки приборов – подключение шлейфом розеток. Важно разобраться, как установить электроприборы безопасно, и в каком случае такой метод нельзя использовать.

Способы подключения

Соединение розеток шлейфом

Существует две основные схемы подключения розеток в квартире. Радиальное, которое еще называют «звездочкой», предусматривает подвод отдельной линии к каждой розетке. Этот способ требует дополнительных финансовых вложений, так как понадобится много дорогостоящего кабеля. Трудности возникают, если в квартире уже выполнена отделка и приходится штробить стены. Достоинства метода — простота и надежность. Его рекомендуется использовать для подключения мощных электрических приборов.

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

Иногда нецелесообразно подключение розеток шлейфом. Такое устройство допустимо, только когда мощность всех включенных приборов не выше мощности кабеля, питающего розетки.

Особенности установки группы розеток шлейфом

Общая схема подключения группы розеток шлейфом

Недостатком способа считается то, что при повреждении провода в одной розетке последующие также не будут работать. При уменьшении их количества надежность эксплуатации системы повышается.

Согласно ПУЭ, подключаться розетки должны без разрыва проводника РЕ. В противном случае они остаются без заземления. Группа должна быть подключена к автомату 16А кабелем 2,5мм, а мощность подключаемых потребителей не превышает 3 квт. Если нагрузка будет выше, к каждому прибору выводят отдельную линию.

Необходимо заранее сделать расчеты, чтобы знать, сколько розеток можно будет подключить последовательно. Нужно установить тип, мощность и количество электроприборов. Соотнести данные с размером помещения и планировкой. Если понадобится большое количество розеток, лучше проложить несколько линий.

Установка блока розеток

Пресс-клещи универсальные

Для работы необходим определенный набор инструментов:

  • индикатор напряжения;
  • уровень;
  • универсальная отвертка;
  • пассатижи;
  • карандаш и строительный нож;
  • пресс клещи;
  • термотрубка;
  • перфоратор.
Расстояние между центрами подрозетников должно быть строго 72 мм

Вначале выполняют схему разводки. На ней указывают расположение распределительных коробок, розеток, выключателей. Размечают трассу, по которой будут идти провода. Они должны располагаться строго вертикально и горизонтально, иметь не более одного изгиба под прямым углом. Глубина каналов до 2,5 см, ширина 3. Длина от коробки до розетки не более 3 метров. Схему следует сохранить, чтобы при следующем ремонте во время работ не попасть в провод.

Наиболее трудоемкая работа — штробление стен. Удобнее это сделать специальным инструментом, но можно обойтись и подручными средствами – молоток, зубило, «болгарка», дрель с победитовым сверлом 8–10мм. Ее следует держать перпендикулярно стене, работать на малых оборотах. Сверло периодически охлаждать в воде.

Далее выполняют отверстия для подрозетников. Гильзы крепят на алебастре или гипсе. Чтобы раствор быстро не застывал, в воду можно добавить клей ПВА. Стандартная коробка имеет глубину 45 мм. В подрозетник легко поместится все необходимое.

Для проходных розеток лучше использовать углубленную гильзу на 60 мм, так как в ней будет располагаться входящий и выходящий кабель.

Монтаж ответвлений в подрозетнике

Скрытая проводка в гипсокартонных конструкциях

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

Подсоединение устройств к силовому кабелю должно быть безопасным и надежным. Каждая розетка должна иметь корпус для защиты от электрического тока. Навесные имеют собственную коробку. Для установки встроенных используют подрозетники. Они выполнены из диэлектрических материалов, надежно фиксируют устройство в стене, предотвращают попадание влаги и пожаробезопасны.


Подключение нескольких розеток проводят трехжильным кабелем. К первой подводят силовой кабель от распределительной коробки. Затем все розетки необходимо соединить между собой. При этом шлейфом подключают все три жилы – фазу, ноль и заземление. Соединение на одной клемме РЕ проводника снижает надежность и ухудшает контакт. Поэтому концы провода заземления соединяют опрессовкой с выводом ответвлений. Это место изолируется колпачком. На клемме должна быть прямоугольная шайба.Схема подключения розеток шлейфом

Заземление устанавливают в каждом подрозетнике, для укладки проводов места достаточно. Этот способ считается надежным и гарантирует защиту. Он незаменим при необходимости дополнительной установки нескольких розеток. Исключает проведение масштабных работ. Используют его при небольших нагрузках в квартире или доме, в обычных условиях.

Правило обустройства электроустановок предписывает запретить соединение РЕ-проводника на разрыв. Для безопасности человека и его жилища важно, чтобы электропроводка соответствовала всем нормам и требованиям.

Порядок работ по монтажу шлейфа

Определение фазы индикаторной отверткой

Все работы требуют профессионального подхода и соблюдения техники безопасности. Нужно знать, как правильно подключить группу розеток. Перед началом  необходимо обесточить всю квартиру, чтобы разъединить и фазу, и ноль. Отсутствие напряжения проверяют индикатором в месте работы. Монтаж проводят в следующей последовательности.

  1. Разметка и подготовка места.
  2. Штробление стен.
  3. Закладка кабеля от распределительной коробки к первому подрозетнику.
  4. Подготовка провода для перемычек.
  5. Установка подрозетников.
  6. Подготовка ответвлений, чтобы соединять РЕ проводники.
  7. Монтаж линии и укладка проводов.

    Правильное подключение шлейфа розетки через соединение проводов в колпачке СИЗ

  8. Соединение нулевых и фазных жил и проводников заземления.
  9. Закрепление рабочих элементов в подрозетнике и установка лицевых крышек.

Качество монтажа зависит от типов контактных элементов. Надежными считаются модели с плоско-пружинным способом соединения. В крайнем случае это может быть пластина, зажатая болтом. Подводной к розетке кабель должен выступать за поверхность стены не более чем на 80 мм. При необходимости его следует укоротить.

Неправильное соединение непосредственно через клеммный контакт розетки приводит к его постепенному выгоранию

Снимается оплетка кабеля, провода разводятся в стороны. Слева фаза, справа ноль, посередине провод заземления. Их концы оголяют на 10мм с помощью съемника изоляции или ножа. Розетка, имеющая самозажимные пружинные клеммы, упрощает работу. Достаточно зачищенный конец провода подать в отверстие до упора.

Затем необходимо потягивающим движением проверить надежность крепления всех жил. В первую очередь упаковываются повода, и вся конструкция вставляется в подрозетник, предварительно закрепляется по бокам винтами. По уровню проверяют горизонтальность, затем винты окончательно затягиваются. Последней устанавливается лицевая панель, накладная рамка.

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

Подключение розеток шлейфом. Соединение розеток шлейфом своими руками

Работы, связанные с электричеством, в том числе и монтаж/демонтаж розеток, безусловно, относятся к числу тех, что требуют профессионального подхода. На сегодняшний день подключение розеток производят одним из следующих способов: используя для каждого места отдельную линию электропроводки или подключив несколько точек к одному источнику (шлейфом).

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

Если речь идет об обслуживании мощных электроприборов, то рекомендуется использовать только розетки с отдельной линией. При этом нужно помнить, что образованная подобным образом цепь рассчитана на определенную суммарную нагрузку и в случае несоблюдения условий эксплуатации в любой момент могут возникнуть проблемы.

Данная статья предназначается в помощь тем, кто решил, что именно подключение розеток шлейфом является оптимальным вариантом для его жилища.

Итак, подключение шлейфом это параллельное соединение всех элементов (в нашем случае розеток) к одной линии электропроводки. Кабель от силового щита идет к подрозетнику, где подсоединяется к первой розетке, к той добавляется вторая, ко второй третья и т.д.

Недостатком такой схемы является то, что если в месте контакта повредится одна из жил, то в определенной точке цепи перестанут работать, как минимум, все идущие далее элементы. Отсюда вывод: чем меньше розеток входит в систему, тем надежнее она будет.

Электропроводка может быть как спрятанной в стенах, так и пролегать по их поверхности. Открытый вариант проще и удобнее, однако, не всегда хорошо смотрится с эстетической точки зрения. Если нет желания постоянно задевать кабель, то имеет смысл поместить его в небольшие предварительно проделанные борозды (штробы), после чего аккуратно их заделать.

Минусом скрытой проводки является необходимость лишний раз «раскурочивать» стены, когда возникнет потребность произвести какие-либо работы. Каждый из вариантов прокладки имеет свои плюсы и минусы, поэтому выбор здесь индивидуален.

Этапы подключения и установки блока розеток

Для осуществления монтажных работ при соединении розеток, естественно, потребуются инструменты. Их набор достаточно стандартен:

  1. — уровень;
  2. — кусачки;
  3. — отвертка;
  4. — нож с карандашом;
  5. — перфоратор.

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

При креплении подрозетника на поверхность стены используются шурупы. Если он будет располагаться внутри, то потребуется проделать в поверхности полость. Мы будем рассматривать стандартную ситуацию, при которой к подрозетнику от щитка подводится только один кабель.

За то, поместятся ли все кабели в коробку, и без того занятую розеткой, особо переживать не стоит. Стандартный 42-х миллиметровый подрозетник спокойно вместит все, что нужно.

Схема подключения розеток шлейфом

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

Соединение розеток шлейфом предусматривает подключение нескольких электрических розеток к одной линии проводки. Для реализации данного метода необходимо соединить шлейфом приходящий и уходящий кабели прямо на контактной части розетки. Все провода: фазный, нулевой, заземление – подключаются параллельно.

При подключении розетки с одной стороны к ней присоединяют кабель от силового щита, с другой выводится провод следующего «шлейфа». В данном примере используется кабель с тремя жилами: «фазы» — коричневого цвета, «нуля» — синего цвета и «земли» — желто-зеленая расцветка.

В одном контакте розетки подключаем фазный провод питающего кабеля и фазный провод шлейфа идущего на вторую розетку. Во втором контакте подключаем нулевые провода питающего кабеля и шлейфа второй розетки. Аналогично выполняем подключение во второй, третьей и т.д., пока не подключим все розетки.

Особенностью такого подключения в том, что все провода соединяются непосредственно в контактах розетки. Качество соединения также во многом зависит от типа контакта.

Специалисты рекомендуют использовать модели с плоско пружинным контактом, который считается самым надежным. Более-менее сносно, если он будет выполнен в форме прижимаемой болтом пластины. Хуже всего, когда роль контакта исполняет просто болт.

Однако в целях соблюдения норм электробезопасности выполняя

подключение розеток шлейфом необходимо сохранить неразрывность заземляющего проводника. Для этого подключаем его с помощью ответвления, а не шлейфованием. Такой способ соединения повысит надежность контакта и позволит избежать его разрывов на протяжении всей длины проводника.

Ответвление заземляющей жилы выполняется одним из самых испытанных и надежных соединений – опрессовкой. Таким образом, после обычной скрутки, соединения проводов способом опрессовки гильзой и изолирования сохраняется по всей длине проводника постоянный надежный контакт.

Важное замечание! Соединение розеток шлейфом допустимо только в том случае, если гарантирована целостность нулевого защитного проводника РЕ. То есть каждая розетка подключается к сети заземления не шлейфованием, а отдельным ответвлением.

Согласно пункту 1.7.144 правил устройства электроустановок, для подключения открытой проводящей части элемента к заземляющему или нулевому проводнику необходимо осуществить отдельное ответвление. Выполнять последовательное подключение защитных проводников не допускается.

При этом в пункте 2.1.26 указывается, что такие ответвления необходимо выполнять в предназначенных для этой цели коробках, а также внутри корпусов электрических изделий, к которым относятся и розетки.

Данная схема соединения штепсельных розеток шлейфом, не нарушающая жилу заземления, позволит избежать нагрузки на клеммы. Ведь заземление представляет собой защитный ноль. Чтобы он оставался таковым, обязательно необходимо обеспечить его постоянное и надежное соединение на протяжении всей линии. Ни в коем случае не на механизмах розетки. Поскольку если контакт заземления потеряется (например, перегорит) в питающей розетке, то все остальные потеряют защитный ноль и будут иметь двухпроводную систему питания (лишимся всей системы заземления).

В процессе монтажа важно внимательно следить за тем, чтобы подсоединение проводилось максимально аккуратно и качественно.

Естественно, если жила будет плохо зачищена или вообще бракованная, то ожидать проблем с ней можно уже в самом скором времени. Если же подключение было произведено в полном соответствии с технологией, то все должно быть нормально. Главное, следить за тем, чтобы нагрузка не превышала допустимой нормы.

Учитывайте нагрузку на розетки, которые соединены шлейфом

Выбор способа соединения розеток посредством распределительной коробки или шлейфом – это, прежде всего, возможность существенно сэкономить на электрическом кабеле. Однако необходимо учитывать, что каждый дополнительный «контакт» проводников представляет собой лишние «слабое» звено.

Номинальная ток, на который рассчитана розетка в пределах 16 А. Если к одной из розеток в блоке подключить такую нагрузку с ней ничего не произойдет. Но если включить такую нагрузку во все розетки может не выдержать питающий кабель или отключится автомат, так как по ним будет протекать суммарный ток, который выше номинального значения.

Подключение розеток шлейфом подходит для электроприемников небольшой мощности. Если речь идет о подключении не особо мощных приборов (аудиотехника, компьютер и т.

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

Если же брать ситуацию в целом, то лучше затратить больше средств и усилий, но сделать каждую розетку автономной. Это намного надежней и не придется лишний раз ломать голову над тем, можно ли будет задействовать ее для того или иного прибора. Тем более, что с каждым годом количество затрачиваемой на бытовые нужды электроэнергии растет, а следовательно, будут возрастать и требования к надежности розеток.

Похожие материалы на сайте:

Понравилась статья — поделись с друзьями!

 

Подключение розеток шлейфом — как это делаем мы

Подключение розеток шлейфом, то есть последовательное соединение, можно встретить практически везде. Это самый распространенный способ их подключения. Так требуется меньше кабеля и уменьшаются трудозатраты. Кто-то считает соединение розеток шлейфом не допустимым, так как будет разрываться нулевой защитный проводник, что запрещено ПУЭ. Хотя большинство электриков на нормативные документы не обращают особого внимания и подключают розетки последовательно с помощью перемычек из жил кабеля.

Мы стараемся придерживаться требований ПУЭ и ниже я хочу рассказать и показать как это делаем мы.

Сначала давайте прочитаем ПУЭ п. 1.7.144:

Присоединение каждой открытой проводящей части электроустановки к нулевому защитному или защитному заземляющему проводнику должно быть выполнено при помощи отдельного ответвления. Последовательное включение в защитный проводник открытых проводящих частей не допускается.

Присоединение проводящих частей к основной системе уравнивания потенциалов должно быть выполнено также при помощи отдельных ответвлений.

Присоединение проводящих частей к дополнительной системе уравнивания потенциалов может быть выполнено при помощи как отдельных ответвлений, так и присоединения к одному общему неразъемному проводнику.

Из этого пункта видно, что подключение нулевых защитных и нулевых рабочих проводников должно быть выполнено с помощью ответвлений и не допускается их последовательное включение. То есть не допускается подключение данных проводников к контактам первой розетки, потом подключение второй розетки с помощью перемычек из жил кабеля и т.д.

Но, как быть, если необходимо сделать подключение розеток шлейфом, например в блоке, состоящем из нескольких розеток? Как это делаем мы я как раз вам и хочу показать.

Подключение розеток шлейфом выглядит так. От щита кабель пришел к первой розетке, потом от нее пошел на вторую, от второй на третью и т.д.

Для того чтобы не нарушать ПУЭ п.1.7.144 необходимо подключения нулевого рабочего и нулевого защитного проводников делать с помощью отдельных ответвлений. Для этого, чтобы уместить соединения ответвлений, мы применяем глубокие подрозетники. Они где-то на два сантиметра глубже обычных коробок, что позволяет в них все свободно уместить.

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

Ниже показываю пример, когда необходимо подключить две розетки, стоящие в одном блоке, и необходимо подключить следующий блок тоже состоящий из двух розеток. Для этого от щита приходит кабель к первому блоку, а второй кабель уже от него уходит на второй блок.

Соединенные установочные коробки монтируем в стену и оба кабеля выводим в глубокий подрозетник. На фото ниже второй кабель плохо видно, так как он лежит под первым.

Затем все концы разделываем и приготавливаем два комплекта перемычек. Таким образом, получается, что в глубоком подрозетнике будут находиться четыре фазных жилы, четыре нулевых рабочих жилы и четыре нулевых защитных жилы. Это группы жил: 1 — от щитка, 2 — на первую розетку блока, 3 — на вторую розетку блока, 4 — на следующий блок розеток.

Далее проводники группируем по цветам и соединяем. Все соединения я делаю с помощью опрессовки.

Гильзы изолируем с помощью термоусаживаемой трубки, так как это надежно, безопасно, быстро и не дорого.

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

На заключительном этапе ставим сами розетки.

Ниже представлен следующий блок розеток, к которому уходит кабель от уже подключенного блока. Здесь выполняются те же самые операции, которые описаны выше.

На следующем фото показан конечный результат. Второй блок розеток находится в левой части фото

Во всей квартире мы подключали розетки шлейфом, как описано в данной статье. Поэтому скрытых распределительных коробок в розеточных линиях здесь нет ни одной, и при необходимости есть доступ ко всем соединениям кабелей.

Розетки в комнате…

Розетки в другой комнате…

Когда полы в квартире еще не готовы, то под инструмент и расходные материалы стелю что-то чистое. Люблю когда весь инструмент находится в чистоте.

А вы как соединяете розетки шлейфом?

Почему заземление шлейфом запрещено | Статьи ЦентрЭнергоЭкспертизы

Электробезопасность один из главных вопросов, который приходится рассматривать при создании и эксплуатации электрических сетей. Меры, направленные на снижение риска возгораний или поражения человека электрическим током увеличивают стоимость современных электросетей, усложняют проведение электромонтажных работ, однако это достойная плата за главное условие – электробезопасность. Согласно стандартам, применяемым ныне в строительстве, минимизация вероятности поражения электрическим током от случайного пробоя на корпус электроприбора обеспечивается защитным заземлением. Именно поэтому современные электрические розетки оснащены третьим контактом, позволяющим посредством нулевых защитных проводников подключать корпуса защищаемых приборов к контуру заземления. Использование трехжильных кабелей состоящих из фазных проводников, нулевых проводов и «земляной» жилы кабеля усложняет:

  • проведение электромонтажных работ;
  • процедуру подключения розеток;

но самое главное обеспечивает электробезопасность сети.

Опасность подключения розеток шлейфом

В настоящий момент не утихают споры в отношении того каким образом подключать электрические розетки:

  • звездой, когда к каждой из них от распределительного щита подводится отдельная линия;
  • шлейфом, в этом случае на отдельную линию параллельно устанавливается группа розеток (при этом соединение каждого из контактов розетки, в том числе защитный ноль, получается последовательным с аналогичным контактом остальных розеток).

Решение спора подсказывают правила установки электрооборудования (ПУЭ) пунктом 1. 7.144 запрещающие соединение защитных проводников шлейфом, тем не менее, стремление сэкономить на дорогостоящем кабеле и монтажных работах толкает многих электриков на их нарушение. Так в чем же опасность? Почему ПУЭ так бескомпромиссны в отношении подключения шлейфом?

Это вопрос безопасности. Когда контакты розеток подключены непосредственно к распределительному щиту обрыв защитного провода, обеспечивающего контакт корпуса прибора и общей шины PE, угрожает только этой розетке. При соединении группы розеток шлейфом, заземляющий проводник подводится к ближайшей в группе розетке, затем ко второй и так далее, а в качестве транзитного контакта используется зачастую винтовые клеммы розеток.

Надежность такого соединения доверия не внушает, со временем оно может ослабевать и контакт с подводящим PE проводником нарушаться. В случае, когда контакт с PE проводником нарушается на ближайшей к щиту розетке:

  • исчезает защита всех розеток группы;
  • при пробое на корпус одного из включенных приборов, напряжение прикосновения появляется на корпусах всех приборов включенных в розетки группы.

Это значительно увеличивает угрозу поражения электрическим током, поэтому подключение защитных нулевых проводников недопустимо.

Поиск компромиссов

Так можно подключать розетки шлейфом или нет, и если да, как это сделать? Решение все же имеется, правда его скорее следует называть параллельным. В рассматриваемом пункте ПУЭ речь идет о заземляющем проводнике, поэтому параллельно соединяют жилы кабеля идущего к щитку и ко всем розеткам (фазный и нулевой), при этом суммарный ток нагрузок шлейфа должен соответствовать сечению жил кабеля. Кроме того следует позаботиться о качестве их соединения. Для этого ни в коем случае не использовать контакты розетки, контакты проводов лучше опрессовать гильзами и изолировать термоусадочной трубкой. Все соединения можно делать в распределительных коробках, а лучше использовать подрозетники увеличенной глубины.

При подключении к PE проводнику следует делать отвод от последнего, ни в коем случае не нарушая целостности его токопроводящей жилы, с аналогичной опрессовкой и изоляцией. Это обеспечит надежное соединения розеток с шиной РЕ, но самое главное нисколько не противоречит ПУЭ.

Смотрите также другие статьи :

Для чего применяются магнитные пускатели

По своему назначению электромагнитные пускатели делятся на обычные и реверсивные. В конструкции реверсивных магнитных пускателей заложено два обычных (в спаренном корпусе) с взаимной блокировкой друг друга, исключающей их одновременное включение и обеспечивающей электрическую блокировку.

Подробнее…

Подключение розеток шлейфом

Соединение розеток шлейфом часто используется при монтаже электрической проводки в квартире. Это достаточно распространенный способ подключения, по своей сути он является магистральным соединением потребителей.

Способы подключения

В настоящее время существуют две основных схемы обустройства электрической проводки в квартире:

  • Радиальное подключение (иногда называемое подключением «звездой», которое не следует путать со схемой, используемых в трехфазных цепях). Такое техническое решение повсеместно применяется в квартирах и частных домах. Основными его достоинствами являются простота и надежность. Главный недостаток – большой расход дорогостоящего кабеля.

  • Кольцевая схема. В нашей стране практически не используется, однако она широко распространена в некоторых регионах западной Европы. Смысл такого подключения состоит в том, что электрическая цепь, питающая нагрузку, замыкается в кольцо. Этим достигается возможность питания потребителей одновременно с двух сторон. Кольцевая схема значительно повышает экономичность электропроводки в сравнении с традиционным радиальным подключением и в то же время является более надежной по отношению к магистральной.

 

Схема подключения

В случае радиального подключения каждой розетке выделяется отдельная линия, идущая непосредственно к распределительной коробке. Естественно, надежность такой схемы является наиболее высокой из всех нерезервируемых подключений. С целью снижения расхода электрического кабеля, необходимого для монтажа электропроводки по радиальной схеме, часто применяется шлейфование розеток.

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

В общем виде схема подключения группы розеток шлейфом выглядит следующим образом:

Поскольку в этой схеме в качестве мест соединения проводов используются клеммы розеток, то такое подключение обладает некоторыми свойствами последовательной электрической цепи. А именно:

  1. В случае отгорания провода на клемме одного из устройств (в таких местах как раз и происходит подавляющее большинство разрывов) все следующие за ним устройства оказываются неработоспособными.
  2. Подключение каждого из потребителей вызывает существенное увеличение тока в проводах, соединяющих розетки с электрической коробкой.

Таким образом, подключение розеток шлейфом целесообразно применять в случаях, когда совокупная мощность потребителей не превышает максимально допустимой мощности кабеля, питающего группу розеток.

Особенности монтажа группы розеток шлейфом:

  1. Согласно требованиям ПУЭ, РЕ-проводник не должен иметь разрывов. Для его соединения с клеммами электроустановки необходимо использовать отдельные ответвления. Неправильное присоединение заземляющего проводника может привести к тому, что в случае его обрыва на одной из розеток все остальные устройства также окажутся незаземленными. Поскольку определить качество заземления без проведения специальных измерений или визуального контроля целостности РЕ-проводника невозможно, то в этом случае не удается достигнуть необходимого уровня электробезопасности.
  2. Для защиты потребителей, питающихся от группы розеток, должен использоваться автоматический выключатель на 16 А. Если совокупная мощность запитываемых электроустановок превышает 3 кВт, то для каждого устройства необходимо прокладывать отдельную линию.

Монтаж ответвлений в подрозетнике

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

Главным достоинством клеммников является отсутствие необходимости использования специального инструмента для их монтажа. Такие изделия устанавливаются очень быстро и просто. Кроме того, каждое из них может быть легко демонтировано для проведения ремонта или обслуживания мест соединения элементов проводки.

В свою очередь, к преимуществам обжимных гильз относится более высокое качество электрического соединения, а также их низкая цена.

При использовании клеммников или обжимных гильз необходимо действовать очень аккуратно, поскольку потребуется компактно расположить все полученные соединения в подрозетнике. Некоторые специалисты рекомендуют не ограничиваться выполнением ответвления для заземляющего провода, а выполнять подключение фазы и нуля к контактам розетки аналогичным образом.

Фазные и нулевые провода допускается подсоединять непосредственно к контактам розетки. Качество такого соединения во многом определяется типом контакта. Стандартные болтовые зажимы часто не способны обеспечить достаточную надежность соединения сразу двух вставленных в них проводов. Поэтому для устройств, предназначенных для подключения шлейфом, необходимо использовать клеммники. Другой вариант – применять качественные устройства, оборудованные несколькими зажимами для каждой клеммы.

Порядок работ по монтажу шлейфового соединения

  1. Подготовка мест установки подрозетников и штробление стен для укладки кабеля между розетками.
  2. Прокладка кабеля от распределительной коробки к первому подрозетнику, от первого – ко второму и так далее по количеству розеток в шлейфе.
  3. Установка подрозетников.
  4. Подготовка ответвлений для подключения РЕ-проводника, а в случае необходимости – нулевого и фазного провода.
  5. Монтаж ответвлений и укладка их в подрозетнике.
  6. Подключение нулевого, фазного и заземляющего проводника к соответствующим клеммам устройства.
  7. Фиксация рабочей части изделия в монтажной коробке.
  8. Установка крышки розетки.

Таким образом, шлейфовое соединение розеток позволяет значительно сэкономить на длине электрических кабелей. Кроме того, оно дает возможность существенно уменьшить объем строительных работ по прокладке электрической проводки. Такое техническое решение может оказаться идеальным при возникновении необходимости добавления одной или двух розеток в помещении без проведения масштабных ремонтных работ.

Правильное соединение розеток шлейфом — Ремонт220

Статьи

Автор Фома Бахтин На чтение 2 мин. Просмотров 5.2k. Опубликовано Обновлено

Все розетки, находящиеся на одной электрической группе имеют одну схему соединения – параллельную. Но «параллелить» розетки можно разными  способами: соединять их в распаячных коробках (скрутки, клеммы, пайка) – 1, или же соединять их между собой на клеммах, минуя эти коробки (соединение шлейфом) – 2.

Какое соединение розеток выбрать? Соединяя розетки шлейфом можно существенно сэкономить на материале – провода, коробки и, соответственно  значительно сократить трудозатраты. Однако в настоящее время в Правилах Устройства Электроустановок (ПУЭ) имеется чёткий и однозначный запрет на разрыв РЕ – проводника («земли»).

В случае, если вы  меняете электропроводку у себя в квартире (доме) опасаться особенно нечего – ведь вам не нужно официально вводить объект в эксплуатацию, но согласитесь, лучше спать спокойно, зная, что электропроводка  вашего жилья в порядке и соответствует всем нормативным требованиям электробезопасности.

Как правильно сделать соединение розеток шлейфом, не нарушив при этом ПУЭ?

Альтернатива есть: на рисунке показан метод такого соединения розеток. Способ достаточно старый, но проверенный, и для надёжности лучше не ограничиваться «земляным» проводом, а оставить неразрывными и токоведущие провода – фазный и нулевой.

При таком соединении розеток нагрузка на клеммы первой розетки, куда «приходит» питание будет ограничиваться лишь мощностью бытовых электроприборов, включенных в неё. Такой способ соединения розеток продляет срок их службы и, самое главное сохраняет РЕ – проводник («землю») неразрывным.

Подключение розеток шлейфом — Блог о строительстве

Содержание

  • 1 Схемы подключение розеток шлейфом
  • 2 Особенности установки розеток шлейфом
  • 3 Порядок монтажа ответвлений в подрозетнике
  • 4 Этапы подключения и установки блока розеток
  • 5 Схема подключения розеток шлейфом
  • 6 Естественно, если жила будет плохо зачищена или вообще бракованная, то ожидать проблем с ней можно уже в самом скором времени. Если же подключение было произведено в полном соответствии с технологией, то все должно быть нормально. Главное, следить за тем, чтобы нагрузка не превышала допустимой нормы.
  • 7 Учитывайте нагрузку на розетки, которые соединены шлейфом
  • 8 Подключение розеток шлейфом. Особенности подключения розеток шлейфом
  • 9 Схемы подключение розеток шлейфом
  • 10 Особенности установки розеток шлейфом
  • 11 Порядок монтажа ответвлений в подрозетнике
  • 12 Тоже интересные статьи
  • 13 Особенности подключения розеток шлейфом
  • 14 Способы подключения
  • 15 Кольцевая схема. В нашей стране практически не используется, однако она широко распространена в некоторых регионах западной Европы. Смысл такого подключения состоит в том, что электрическая цепь, питающая нагрузку, замыкается в кольцо. Этим достигается возможность питания потребителей одновременно с двух сторон. Кольцевая схема значительно повышает экономичность электропроводки в сравнении с традиционным радиальным подключением и в то же время является более надежной по отношению к магистральной.
  • 16 Схема подключения
  • 17 Поскольку в этой схеме в качестве мест соединения проводов используются клеммы розеток, то такое подключение обладает некоторыми свойствами последовательной электрической цепи. А именно: В случае отгорания провода на клемме одного из устройств (в таких местах как раз и происходит подавляющее большинство разрывов) все следующие за ним устройства оказываются неработоспособными.Подключение каждого из потребителей вызывает существенное увеличение тока в проводах, соединяющих розетки с электрической коробкой. Таким образом, подключение розеток шлейфом целесообразно применять в случаях, когда совокупная мощность потребителей не превышает максимально допустимой мощности кабеля, питающего группу розеток.
  • 18 Особенности монтажа группы розеток шлейфом:
  • 19 Монтаж ответвлений в подрозетнике
  • 20 Порядок работ по монтажу шлейфового соединения

Схемы подключение розеток шлейфом

Соединяют розетки шлейфом несколькими способами;

— радиальное подключениеили подключение звездой используется при монтаже электропроводки в домахи квартирах. При таком монтаже розеток, каждая розетка подключена к распределительной коробке или к электрощиту отдельной линией и устанавливаются они в одном месте, рядом.

Этот способ характеризуется большой надежностью и безопасностью, но из-за необходимости в дополнительном кабели он считается самым затратным. Штробу для такого способа параллельного соединения можно делать одну широкую для всех кобелей. Если розетки предназначены для больших нагрузок, то необходим именно этот способ монтажа;

— кольцевая схема соединенияпредставляет собой подключение розеток с двух сторон, то есть на кольцо. Такой вид соединения увеличивает надежность, безопасность и экономичность электропроводки. Но в нашей стране этот метод практически не используется, хотя за рубежом он достаточно популярен;

— подключение розеток шлейфом(параллельно) делают с целью снижения затрат на кабель, но в этом случае снижается надежность и безопасность электропроводки. При таком варианте подключения нужно предусмотреть чтобы суммарная мощность нагрузок потребителей шлейфа розеток не превышала допустимый ток кабеля.

Подключение розеток шлейфом

Для соединений шлейфом нужно предусмотреть, чтобы суммарная мощность нагрузок шлейфа розетокне превышала допустимый ток кабеля. Здесь допустимая нагрузка на одну розетку ниже, чем у одиночной розетки с отдельной линией или розетки подключённой по радиальному способу.

Особенности установки розеток шлейфом

Подключение розеток шлейфом имеет свои плюсы и минусы.

Минусом можно читать то, что при обрыве провода в группе, не будут работать последующие розетки. При меньшем числе розеток в группе надежность их повышается. Единственным плюсом можно считать экономию и простоту монтажа электропроводки.

Подключение розеток шлейфом без разрыва заземления методом пайки

Подключение розеток шлейфом по ПУЭ должно быть без разрыва проводника PE. Заземление подключается к клеммам розетки PE только ответвлением.

Это связано с тем, что при обрыве проводника заземления розетка остается без защитного заземления. Мощность группы розеток не должно быть больше 3 квт и подключается к автомату 16 А. Если нагрузка группы превышает 3 квт, тогда необходимо к каждой розетке вести отдельную линию.

Порядок монтажа ответвлений в подрозетнике

Часто подключают группу розеток к одному трехжильного кабелю и соединяют их шлейфом, то есть параллельно. При параллельном соединении не соблюдается требование непрерывности защитного заземления. Соединение шлейфом двух проводников PE на одной клемме, снижает надежность контакта.

Шлейфом соединяют все три проводника в каждой розетке (фаза, ноль и заземление). Подключение шлейфом делается в случае небольших нагрузок потребителей и при нормальных условиях эксплуатации. Также используют шлейф при необходимости скорого добавления розеток.

Подключение розеток шлейфом без разрыва защитного заземления PE методом опрессовки

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

Концы провода заземления соединяют опрессовкой, с выводом ответвления.

Гильза после опрессовки изолируется специальным колпачком. Такое соединение заземления делают для каждой розетки в подрозетнике. Опрессовка считается самым надежным соединением и обеспечивает непрерывность провода заземления.

Ответвление снижает нагрузку на клемму.

Некоторые специалисты рекомендуют использовать соединение с ответвлением и опрессовкой, не только для заземления, но и для фазного и нулевого проводника. Места для укладки ответвлений и опрессовки в современных подрозетниках достаточно. Делают соединение шлейфом при добавлении одной или двух розеток, с небольшими ремонтными работами.

Все розетки, находящиеся на одной электрической группе, имеют одну схему соединения, параллельную.Упрощенная схема разводки розеток.Но «параллелить» розетки можно разными  способами: соединять их в распаячных коробках (скрутки, клеммы, пайка) или же соединять их между собой на клеммах, минуя эти коробки (соединение шлейфом).Какое соединение розеток выбрать?Подключение новой розетки шлейфом от старой.Соединяя розетки шлейфом, можно существенно сэкономить на материале и значительно сократить трудозатраты.

Однако в настоящее время в Правилах устройства электроустановок (ПУЭ) имеется чёткий и однозначный запрет на разрыв РЕ – проводника («земли»).В случае если вы  меняете электропроводку у себя в квартире (доме), опасаться особенно нечего, ведь вам не нужно официально вводить объект в эксплуатацию, но согласитесь, что лучше спать спокойно, зная, что электропроводка вашего жилья в порядке и соответствует всем нормативным требованиям электробезопасности.Как правильно сделать соединение розеток шлейфом, не нарушив при этом ПУЭ? Альтернатива есть, на рисунке показан метод такого соединения розеток. Способ достаточно старый, но проверенный, и для надёжности лучше не ограничиваться «земляным» проводом, а оставить неразрывными и токоведущие провода, фазный и нулевой.При таком соединении розеток нагрузка на клеммы первой розетки, куда «приходит» питание, будет ограничиваться лишь мощностью бытовых электроприборов, включенных в неё.Такой способ соединения розеток продляет срок их службы и, самое главное, сохраняет РЕ, проводник («землю»), неразрывным.Поделитесь полезной статьей:

Работы, связанные с электричеством, в том числе и монтаж/демонтаж розеток, безусловно, относятся к числу тех, что требуют профессионального подхода. На сегодняшний день подключение розеток производят одним из следующих способов: используя для каждого места отдельную линию электропроводки или подключив несколько точек к одному источнику (шлейфом).

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

Если речь идет об обслуживании мощных электроприборов, то рекомендуется использовать только розетки с отдельной линией. При этом нужно помнить, что образованная подобным образом цепь рассчитана на определенную суммарную нагрузку и в случае несоблюдения условий эксплуатации в любой момент могут возникнуть проблемы.

Данная статья предназначается в помощь тем, кто решил, что именно подключение розеток шлейфомявляется оптимальным вариантом для его жилища.

Итак, подключение шлейфомэто параллельное соединение всех элементов (в нашем случае розеток) к одной линии электропроводки. Кабель от силового щита идет к подрозетнику, где подсоединяется к первой розетке, к той добавляется вторая, ко второй третья и т.д.

Недостатком такой схемы является то, что если в месте контакта повредится одна из жил, то в определенной точке цепи перестанут работать, как минимум, все идущие далее элементы. Отсюда вывод: чем меньше розеток входит в систему, тем надежнее она будет.

Электропроводка может быть как спрятанной в стенах, так и пролегать по их поверхности. Открытый вариант проще и удобнее, однако, не всегда хорошо смотрится с эстетической точки зрения. Если нет желания постоянно задевать кабель, то имеет смысл поместить его в небольшие предварительно проделанные борозды (штробы), после чего аккуратно их заделать.

Минусом скрытой проводки является необходимость лишний раз «раскурочивать» стены, когда возникнет потребность произвести какие-либо работы. Каждый из вариантов прокладки имеет свои плюсы и минусы, поэтому выбор здесь индивидуален.

Этапы подключения и установки блока розеток

Для осуществления монтажных работ при соединении розеток, естественно, потребуются инструменты. Их набор достаточно стандартен:

    – уровень;- кусачки;- отвертка;- нож с карандашом;- перфоратор.

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

При креплении подрозетника на поверхность стены используются шурупы. Если он будет располагаться внутри, то потребуется проделать в поверхности полость. Мы будем рассматривать стандартную ситуацию, при которой к подрозетнику от щитка подводится только один кабель.

За то, поместятся ли все кабели в коробку, и без того занятую розеткой, особо переживать не стоит. Стандартный 42-х миллиметровый подрозетник спокойно вместит все, что нужно.

Схема подключения розеток шлейфом

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

Отмеряем кабель с запасом для каждого блока, но не стоит делать слишком длинные перемычки. Их длина должна быть такой, чтобы после подключения розетки, ее можно было установить в подрозетнике. Я использовал для перемычек кабель такой же марки и сечения, как и питающий.

Соединение розеток шлейфомпредусматривает подключение нескольких электрических розеток к одной линии проводки. Для реализации данного метода необходимо соединить шлейфом приходящий и уходящий кабели прямо на контактной части розетки. Все провода: фазный, нулевой, заземление – подключаются параллельно.При подключении розетки с одной стороны к ней присоединяют кабель от силового щита, с другой выводится провод следующего «шлейфа».

В данном примере используется кабель с тремя жилами: «фазы» – коричневого цвета, «нуля» – синего цвета и «земли» – желто-зеленая расцветка.В одном контакте розетки подключаем фазный провод питающего кабеля и фазный провод шлейфа идущего на вторую розетку.Во втором контакте подключаем нулевые провода питающего кабеля и шлейфа второй розетки. Аналогично выполняем подключение во второй, третьей и т. д., пока не подключим все розетки.

Особенностью такого подключения в том, что все провода соединяются непосредственно в контактах розетки. Качество соединения также во многом зависит от типа контакта.Специалисты рекомендуют использовать модели с плоско пружинным контактом, который считается самым надежным. Более-менее сносно, если он будет выполнен в форме прижимаемой болтом пластины.

Хуже всего, когда роль контакта исполняет просто болт.Однако в целях соблюдения норм электробезопасности выполняя подключение розеток шлейфомнеобходимо сохранить неразрывность заземляющего проводника. Для этого подключаем его с помощью ответвления, а не шлейфованием. Такой способ соединения повысит надежность контакта и позволит избежать его разрывов на протяжении всей длины проводника.

Ответвление заземляющей жилы выполняется одним из самых испытанных и надежных соединений – опрессовкой. Таким образом, после обычной скрутки, соединения проводов способом опрессовки гильзой и изолирования сохраняется по всей длине проводника постоянный надежный контакт.Важное замечание! Соединение розеток шлейфом допустимо только в том случае, если гарантирована целостность нулевого защитного проводника РЕ.

То есть каждая розетка подключается к сети заземления не шлейфованием, а отдельным ответвлением.Согласно пункту 1.7.144 правил устройства электроустановок, для подключения открытой проводящей части элемента к заземляющему или нулевому проводнику необходимо осуществить отдельное ответвление. Выполнять последовательное подключение защитных проводников не допускается. При этом в пункте 2.1.26 указывается, что такие ответвления необходимо выполнять в предназначенных для этой цели коробках, а также внутри корпусов электрических изделий, к которым относятся и розетки.

Данная схема соединения штепсельных розеток шлейфом, не нарушающая жилу заземления, позволит избежать нагрузки на клеммы.

Ведь заземление представляет собой защитный ноль.Чтобы он оставался таковым, обязательно необходимо обеспечить его постоянное и надежное соединение на протяжении всей линии. Ни в коем случае не на механизмах розетки. Поскольку если контакт заземления потеряется (например, перегорит) в питающей розетке, то все остальные потеряют защитный ноль и будут иметь двухпроводную систему питания (лишимся всей системы заземления).В процессе монтажа важно внимательно следить за тем, чтобы подсоединение проводилось максимально аккуратно и качественно.

Естественно, если жила будет плохо зачищена или вообще бракованная, то ожидать проблем с ней можно уже в самом скором времени. Если же подключение было произведено в полном соответствии с технологией, то все должно быть нормально. Главное, следить за тем, чтобы нагрузка не превышала допустимой нормы.

Учитывайте нагрузку на розетки, которые соединены шлейфом

Выбор способа соединения розетокпосредством распределительной коробки или шлейфом – это, прежде всего, возможность существенно сэкономить на электрическом кабеле. Однако необходимо учитывать, что каждый дополнительный «контакт» проводников представляет собой лишние «слабое» звено.

Номинальная ток, на который рассчитана розетка в пределах 16 А. Если к одной из розеток в блоке подключить такую нагрузку с ней ничего не произойдет. Но если включить такую нагрузку во все розетки может не выдержать питающий кабель или отключится автомат, так как по ним будет протекать суммарный ток, который выше номинального значения.

Подключение розеток шлейфом подходит для электроприемников небольшой мощности.

Если речь идет о подключении не особо мощных приборов (аудиотехника, компьютер и т. д.), расположенных в одной комнате, то естественно нет особого смысла проводить отдельную линию для каждой точки. Применение шлейфового подсоединения также оправдано в случаях, когда нужно оперативно добавить одну-две дополнительных розетки.

Если же брать ситуацию в целом, то лучше затратить больше средств и усилий, но сделать каждую розетку автономной. Это намного надежней и не придется лишний раз ломать голову над тем, можно ли будет задействовать ее для того или иного прибора. Тем более, что с каждым годом количество затрачиваемой на бытовые нужды электроэнергии растет, а следовательно, будут возрастать и требования к надежности розеток.

Похожие материалы на сайте:

    1) Расположение розеток и выключателей

Правильное соединение розеток шлейфомВсе розетки, находящиеся на одной электрической группе имеют одну схему соединения – параллельную. Но «параллелить» розетки можно разными способами: соединять их в распаячных коробках(скрутки, клеммы, пайка) – 1. или же соединять их между собой на клеммах, минуя эти коробки (соединение шлейфом) – 2.Какое соединение розеток выбрать.

Соединяя розетки шлейфом можно существенно сэкономить на материале – провода, коробки и, соответственно значительно сократить трудозатраты. Однако в настоящее время в Правилах Устройства Электроустановок (ПУЭ) имеется чёткий и однозначный запрет на разрыв РЕ – проводника («земли»).В случае, если вы меняете электропроводку у себя в квартире (доме)опасаться особенно нечего – ведь вам не нужно официально вводить объект в эксплуатацию, но согласитесь, лучше спать спокойно, зная, что электропроводка вашего жилья в порядке и соответствует всем нормативным требованиям электробезопасности.Как правильно сделать соединение розеток шлейфом. не нарушив при этом ПУЭ?

Альтернатива есть: на рисунке показан метод такого соединения розеток. Способ достаточно старый, но проверенный, и для надёжности лучше не ограничиваться «земляным» проводом, а оставить неразрывными и токоведущие провода – фазный и нулевой.При таком соединении розетокнагрузка на клеммы первой розетки, куда «приходит» питание будет ограничиваться лишь мощностью бытовых электроприборов, включенных в неё. Такой способ соединения розеток продляет срок их службы и, самое главное сохраняет РЕ – проводник («землю») неразрывным.© Copyright 2010-2016 При использовании материалов сайтаактивная ссылка на remont220.ru обязательна

Сайт использует файлы cookie . Продолжая просмотр сайта, вы соглашаетесь с использованием файлов cookie.

Подключение розеток шлейфом. Особенности подключения розеток шлейфом

Схемы подключение розеток шлейфом

Соединяют розетки шлейфом несколькими способами;

— радиальное подключениеили подключение звездой используется при монтаже электропроводки в домах и квартирах. При таком монтаже розеток, каждая розетка подключена к распределительной коробке или к электрощиту отдельной линией и устанавливаются они в одном месте, рядом.

Этот способ характеризуется большой надежностью и безопасностью, но из-за необходимости в дополнительном кабели он считается самым затратным. Штробу для такого способа параллельного соединения можно делать одну широкую для всех кобелей. Если розетки предназначены для больших нагрузок, то необходим именно этот способ монтажа;

— кольцевая схема соединенияпредставляет собой подключение розеток с двух сторон, то есть на кольцо. Такой вид соединения увеличивает надежность, безопасность и экономичность электропроводки. Но в нашей стране этот метод практически не используется, хотя за рубежом он достаточно популярен;

— подключение розеток шлейфом(параллельно) делают с целью снижения затрат на кабель, но в этом случае снижается надежность и безопасность электропроводки. При таком варианте подключения нужно предусмотреть чтобы суммарная мощность нагрузок потребителей шлейфа розеток не превышала допустимый ток кабеля.

Подключение розеток шлейфом

Для соединений шлейфом нужно предусмотреть, чтобы суммарная мощность нагрузок шлейфа розеток не превышала допустимый ток кабеля. Здесь допустимая нагрузка на одну розетку ниже, чем у одиночной розетки с отдельной линией или розетки подключённой по радиальному способу.

Особенности установки розеток шлейфом

Подключение розеток шлейфом имеет свои плюсы и минусы.

Минусом можно читать то, что при обрыве провода в группе, не будут работать последующие розетки. При меньшем числе розеток в группе надежность их повышается. Единственным плюсом можно считать экономию и простоту монтажа электропроводки.

Подключение розеток шлейфом без разрыва заземления методом пайки

Подключение розеток шлейфом по ПУЭ должно быть без разрыва проводника PE. Заземление подключается к клеммам розетки PE только ответвлением.

Это связано с тем, что при обрыве проводника заземления розетка остается без защитного заземления. Мощность группы розеток не должно быть больше 3 квт и подключается к автомату 16 А. Если нагрузка группы превышает 3 квт, тогда необходимо к каждой розетке вести отдельную линию.

Порядок монтажа ответвлений в подрозетнике

Часто подключают группу розеток к одному трехжильного кабелю и соединяют их шлейфом, то есть параллельно. При параллельном соединении не соблюдается требование непрерывности защитного заземления. Соединение шлейфом двух проводников PE на одной клемме, снижает надежность контакта.

Шлейфом соединяют все три проводника в каждой розетке (фаза, ноль и заземление). Подключение шлейфом делается в случае небольших нагрузок потребителей и при нормальных условиях эксплуатации. Также используют шлейф при необходимости скорого добавления розеток.

Подключение розеток шлейфом без разрыва защитного заземления PE методом опрессовки

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

Концы провода заземления соединяют опрессовкой, с выводом ответвления.

Гильза после опрессовки изолируется специальным колпачком. Такое соединение заземления делают для каждой розетки в подрозетнике. Опрессовка считается самым надежным соединением и обеспечивает непрерывность провода заземления.

Ответвление снижает нагрузку на клемму.

Некоторые специалисты рекомендуют использовать соединение с ответвлением и опрессовкой, не только для заземления, но и для фазного и нулевого проводника. Места для укладки ответвлений и опрессовки в современных подрозетниках достаточно. Делают соединение шлейфом при добавлении одной или двух розеток, с небольшими ремонтными работами.

Тоже интересные статьи

Параллельное подключение розеток

Две фазы в розетке: разбор причин

Подключение розетки rj 45. Как подключить интернет розетку

Как подключить розетку?

Особенности подключения розеток шлейфом

Соединение розеток шлейфом часто используется при монтаже электрической проводки в квартире. Это достаточно распространенный способ подключения, по своей сути он является магистральным соединением потребителей.

Способы подключения

В настоящее время существуют две основных схемы обустройства электрической проводки в квартире:

Радиальное подключение (иногда называемое подключением «звездой», которое не следует путать со схемой, используемых в трехфазных цепях).

Такое техническое решение повсеместно применяется в квартирах и частных домах. Основными его достоинствами являются простота и надежность. Главный недостаток – большой расход дорогостоящего кабеля.

Кольцевая схема. В нашей стране практически не используется, однако она широко распространена в некоторых регионах западной Европы.

Смысл такого подключения состоит в том, что электрическая цепь, питающая нагрузку, замыкается в кольцо. Этим достигается возможность питания потребителей одновременно с двух сторон. Кольцевая схема значительно повышает экономичность электропроводки в сравнении с традиционным радиальным подключением и в то же время является более надежной по отношению к магистральной.

Схема подключения

В случае радиального подключения каждой розетке выделяется отдельная линия, идущая непосредственно к распределительной коробке. Естественно, надежность такой схемы является наиболее высокой из всех нерезервируемых подключений. С целью снижения расхода электрического кабеля, необходимого для монтажа электропроводки по радиальной схеме, часто применяется шлейфование розеток.

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

В общем виде схема подключения группы розеток шлейфом выглядит следующим образом:

Поскольку в этой схеме в качестве мест соединения проводов используются клеммы розеток, то такое подключение обладает некоторыми свойствами последовательной электрической цепи. А именно:

    В случае отгорания провода на клемме одного из устройств (в таких местах как раз и происходит подавляющее большинство разрывов) все следующие за ним устройства оказываются неработоспособными.Подключение каждого из потребителей вызывает существенное увеличение тока в проводах, соединяющих розетки с электрической коробкой.

Таким образом, подключение розеток шлейфом целесообразно применять в случаях, когда совокупная мощность потребителей не превышает максимально допустимой мощности кабеля, питающего группу розеток.

Особенности монтажа группы розеток шлейфом:

Согласно требованиям ПУЭ, РЕ-проводник не должен иметь разрывов. Для его соединения с клеммами электроустановки необходимо использовать отдельные ответвления.

Неправильное присоединение заземляющего проводника может привести к тому, что в случае его обрыва на одной из розеток все остальные устройства также окажутся незаземленными. Поскольку определить качество заземления без проведения специальных измерений или визуального контроля целостности РЕ-проводника невозможно, то в этом случае не удается достигнуть необходимого уровня электробезопасности.Для защиты потребителей, питающихся от группы розеток, должен использоваться автоматический выключатель на 16 А. Если совокупная мощность запитываемых электроустановок превышает 3 кВт, то для каждого устройства необходимо прокладывать отдельную линию.

Монтаж ответвлений в подрозетнике

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

Главным достоинством клеммников является отсутствие необходимости использования специального инструмента для их монтажа.

Такие изделия устанавливаются очень быстро и просто. Кроме того, каждое из них может быть легко демонтировано для проведения ремонта или обслуживания мест соединения элементов проводки.В свою очередь, к преимуществам обжимных гильз относится более высокое качество электрического соединения, а также их низкая цена.При использовании клеммников или обжимных гильз необходимо действовать очень аккуратно, поскольку потребуется компактно расположить все полученные соединения в подрозетнике. Некоторые специалисты рекомендуют не ограничиваться выполнением ответвления для заземляющего провода, а выполнять подключение фазы и нуля к контактам розетки аналогичным образом.Фазные и нулевые провода допускается подсоединять непосредственно к контактам розетки.

Качество такого соединения во многом определяется типом контакта.Стандартные болтовые зажимы часто не способны обеспечить достаточную надежность соединения сразу двух вставленных в них проводов. Поэтому для устройств, предназначенных для подключения шлейфом, необходимо использовать клеммники. Другой вариант – применять качественные устройства, оборудованные несколькими зажимами для каждой клеммы.

Порядок работ по монтажу шлейфового соединения

    Подготовка мест установки подрозетников и штробление стен для укладки кабеля между розетками.Прокладка кабеля от распределительной коробки к первому подрозетнику, от первого – ко второму и так далее по количеству розеток в шлейфе.Установка подрозетников.Подготовка ответвлений для подключения РЕ-проводника, а в случае необходимости – нулевого и фазного провода.Монтаж ответвлений и укладка их в подрозетнике.Подключение нулевого, фазного и заземляющего проводника к соответствующим клеммам устройства.Фиксация рабочей части изделия в монтажной коробке.Установка крышки розетки.

Таким образом, шлейфовое соединение розеток позволяет значительно сэкономить на длине электрических кабелей. Кроме того, оно дает возможность существенно уменьшить объем строительных работ по прокладке электрической проводки. Такое техническое решение может оказаться идеальным при возникновении необходимости добавления одной или двух розеток в помещении без проведения масштабных ремонтных работ.

Источники: http://remont220.ru/shleif.php, http://electricavdome.ru/podklyuchenie-rozetok-shlejfom.html, http://mr-build.ru/elektrika/podklyuchenie-rozetok-shlejfom.html

Комментариев пока нет!

Источники:

  • electricavdome.ru
  • fazaa.ru
  • electricvdome.ru
  • kak-delat-pravilno.ru

socket.io — Лучшая производительность — передача в сокеты через петлю или комнаты

Во-первых, socket.io уже создает комнату для каждого пользователя. У этой комнаты есть имя socket.id . Комнаты — очень легкие объекты. По сути, они просто состоят из объекта со всеми идентификаторами розеток, которые есть в комнате. Таким образом, не должно быть никаких сомнений в том, чтобы использовать комнаты. Если они соответствуют модели того, что вы делаете, используйте их.

Что касается зацикливания себя vs.излучение в комнату, на самом деле нет никакой разницы — используйте то, что упрощает ваш код. Когда вы излучаете в комнату, все, что он делает, — это перебирает розетки в комнате и отправляет их каждому отдельно.

Необходимость перебирать соединения сокетов кажется неэффективной, и мне интересно, есть ли способ лучше.

Основным преимуществом комнат является то, что они представляют собой предварительно созданные ассоциации сокетов, поэтому вам не нужно динамически выяснять, на какие сокеты вы хотите отправить — уже есть список сокетов в нужной комнате, в которую вы можете отправлять.Таким образом, вероятно, было бы немного эффективнее просто отправлять на все сокеты в комнате, чем делать то, что делает ваш код, потому что ваш код динамически пытается выяснить, на какие сокеты отправлять, а не отправлять на уже созданный список. Будет ли это иметь значение? Это зависит от длины всего списка сокетов и от того, насколько дорого обходятся вычисления, чтобы выяснить, на какие из них вы хотите отправить. Я предполагаю, что в любом случае это не будет иметь большого значения.

Отправка сообщения в комнату не намного эффективнее, чем фактическая отправка.Каждому сокету нужно отправить сообщение индивидуально, чтобы кто-то (ваш код или код комнат socket.io) в любом случае перебирал список сокетов. Базовая ОС не содержит функции для отправки одного сообщения на несколько сокетов. Каждый сокет нужно отправлять индивидуально.

Тогда я бы просто транслировал в соответствующие комнаты, а не всегда проходил через все сокеты.

Отправка в комнату — это удобство программирования для вас, но сокет.io все равно будет зацикливаться под одеялом.

asyncore — обработчик асинхронных сокетов — документация Python 3.9.5

Исходный код: Lib / asyncore.py

Устарело с версии 3.6: используйте вместо него asyncio .


Примечание

Этот модуль существует только для обратной совместимости. Для нового кода мы рекомендую использовать asyncio .

Этот модуль предоставляет базовую инфраструктуру для записи асинхронного сокета. обслуживание клиентов и серверов.

Есть только два способа заставить программу на одном процессоре делать «больше, чем одно за раз ». Многопоточное программирование — самое простое и самое удобное популярный способ сделать это, но есть еще один совсем другой метод, который позволяет у вас есть почти все преимущества многопоточности, фактически не используя несколько потоков. Это действительно практично, только если ваша программа в основном связана с вводом-выводом. граница. Если ваша программа привязана к процессору, то приоритетные запланированные потоки наверное то, что вам действительно нужно.Сетевые серверы редко бывают процессорами связаны, однако.

Если ваша операционная система поддерживает системный вызов select () в своем вводе / выводе библиотеки (и почти все так и есть), то вы можете использовать ее, чтобы манипулировать несколькими каналы связи сразу; выполняет другую работу, пока ваш ввод-вывод поместите на «задний план». Хотя эта стратегия может показаться странной и сложна, особенно поначалу, во многих отношениях ее легче понять и контроль, чем многопоточное программирование. Модуль asyncore решает многие из сложных проблем для вас, делая задачу построения сложные высокопроизводительные сетевые серверы и клиенты в мгновение ока.Для «Разговорные» приложения и протоколы the companion asynchat модуль бесценен.

Основная идея обоих модулей заключается в создании одной или нескольких сетей. каналов , экземпляры класса asyncore.dispatcher и asynchat.async_chat . Создание каналов добавляет их в глобальный карта, используемая функцией loop () , если вы не предоставили ей свой собственный карта .

После создания начального канала (ов) вызывается функция loop () . активирует сервис канала, который продолжается до последнего канала (включая все, что было добавлено на карту во время асинхронного обслуживания) закрывается.

asyncore. цикл ([ тайм-аут [, use_poll [, map [, count ]]]])

Введите цикл опроса, который завершается после прохождения счетчика или полного открытия каналы были закрыты. Все аргументы необязательны. Счетчик по умолчанию для параметра установлено значение Нет , в результате чего цикл завершается только тогда, когда все каналы были закрыты. Аргумент timeout устанавливает время ожидания параметр для соответствующего select () или poll () звонок, измеряемый в секундах; по умолчанию 30 секунд. use_poll параметр, если истина, указывает, что poll () следует использовать в предпочтение select () (по умолчанию False ).

Карта Параметр — это словарь, элементами которого являются каналы для просмотра. Когда каналы закрываются, они удаляются со своей карты. Если карта опущено, используется глобальная карта. Каналы (экземпляры asyncore.dispatcher , asynchat.async_chat и подклассы из них) можно свободно смешивать на карте.

класс asyncore. диспетчер

Диспетчер Класс — это тонкая обертка вокруг низкоуровневого сокета объект. Чтобы сделать его более полезным, в нем есть несколько методов обработки событий. которые вызываются из асинхронного цикла. В противном случае это можно лечить как обычный неблокирующий объект сокета.

Запуск низкоуровневых событий в определенное время или при определенной связи состояния сообщает асинхронному циклу, что определенные события более высокого уровня имеют состоялось.Например, если мы запросили сокет для подключения к другой хост, мы знаем, что соединение было установлено, когда сокет становится доступным для записи в первый раз (на этом этапе вы знаете, что можете пишите в него с надеждой на успех). Подразумеваемый более высокий уровень событий:

Событие

Описание

handle_connect ()

Подразумевается при первом чтении или записи событие

handle_close ()

Подразумевается событием чтения без данных в наличии

handle_accepted ()

Подразумевается событием чтения при прослушивании розетка

Во время асинхронной обработки каждого отображенного канала доступны для чтения () и Writable () методов используются для определения того, необходимо добавить в список каналов select () ed или poll () ed для событий чтения и записи.

Таким образом, набор событий канала больше, чем базовых событий сокета. В Полный набор методов, которые можно переопределить в вашем подклассе, следующий:

handle_read ()

Вызывается, когда асинхронный цикл обнаруживает, что вызов read () на сокет канала будет успешным.

handle_write ()

Вызывается, когда асинхронный цикл обнаруживает, что доступный для записи сокет может быть написано.Часто этот метод реализует необходимую буферизацию для представление. Например:

 def handle_write (сам):
    отправлено = self.send (self.buffer)
    self.buffer = self.buffer [отправлено:]
 
handle_expt ()

Вызывается при наличии внеполосных данных (OOB) для сокет-соединения. Этот почти никогда не произойдет, так как OOB мало поддерживается и редко используется.

handle_connect ()

Вызывается, когда сокет активного открывателя действительно устанавливает соединение.Мощь отправить приветственный баннер или начать переговоры по протоколу с удаленная конечная точка, например.

handle_close ()

Вызывается при закрытии сокета.

handle_error ()

Вызывается при возникновении исключения и не обрабатывается иным образом. По умолчанию version печатает сжатую трассировку.

handle_accept ()

Вызывается на прослушивающих каналах (пассивные открыватели), когда соединение может быть установлен с новой удаленной конечной точкой, которая выпустила connect () вызовите локальную конечную точку.Не рекомендуется в версии 3.2; использовать handle_accepted () вместо этого.

Не рекомендуется, начиная с версии 3.2.

handle_accepted ( носок , адрес )

Вызывается на прослушивающих каналах (пассивные открыватели), когда соединение установлено. установлен с новой удаленной конечной точкой, которая выпустила connect () вызовите локальную конечную точку. sock — это новый объект сокета , используемый для отправлять и получать данные о соединении, а addr — это адрес привязан к сокету на другом конце соединения.

читаемый ()

Вызывается каждый раз в асинхронном цикле, чтобы определить, сокет канала должен быть добавлен в список, в котором события чтения могут происходить. Метод по умолчанию просто возвращает True , указывая, что по умолчанию все каналы будут заинтересованы в чтении событий.

с возможностью записи ()

Вызывается каждый раз в асинхронном цикле, чтобы определить, сокет канала должен быть добавлен в список, в котором события записи могут происходить.Метод по умолчанию просто возвращает True , указывая, что по умолчанию все каналы будут заинтересованы в событиях записи.

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

create_socket ( семейство = socket.AF_INET , тип = socket.SOCK_STREAM )

Это идентично созданию обычного сокета и будет использовать Те же варианты создания.См. Документацию по розетке . информация по созданию розеток.

Изменено в версии 3.3: аргументы семейства и типа можно не указывать.

подключение ( адрес )

Как и в случае с обычным объектом сокета, адрес является кортежем с первым элемент — хост, к которому нужно подключиться, а второй — номер порта.

отправить ( данные )

Отправить данные на удаленную конечную точку сокета.

recv ( размер_буфера )

Прочитать не более buffer_size байта из удаленной конечной точки сокета. An пустой объект байтов означает, что канал был закрыт из другой конец.

Обратите внимание, что recv () может вызвать BlockingIOError , даже если select.select () или select.poll () сообщил о сокете готов к чтению.

слушать ( отставание )

Прослушивание подключений к сокету.Аргумент отставания указывает максимальное количество подключений в очереди и должно быть не менее 1; максимальное значение зависит от системы (обычно 5).

привязка ( адрес )

Привяжите сокет к адресу . Сокет еще не должен быть привязан. (В формат адреса зависит от семейства адресов — см. socket документация для получения дополнительной информации.) Отметить сокет как повторно используемый (установка опции SO_REUSEADDR ), вызовите метод set_reuse_addr () объекта диспетчера .

принять ()

Принять соединение. Сокет должен быть привязан к адресу и прослушивать для подключений. Возвращаемое значение может быть None или пара (conn, address) , где conn — это новый объект сокета , который можно использовать для отправки и получать данные о соединении, а адрес — это адрес, привязанный к гнездо на другом конце соединения. Если возвращается None , это означает, что соединение не было установлено в в этом случае сервер должен просто игнорировать это событие и продолжать слушать для дальнейших входящих подключений.

закрыть ()

Закройте розетку. Все будущие операции с объектом сокета завершатся ошибкой. Удаленная конечная точка больше не будет получать данные (после того, как данные в очереди будут покраснел). Розетки автоматически закрываются, когда они сборщик мусора.

класс asyncore. dispatcher_with_send

Подкласс диспетчера , который добавляет возможность простого буферизованного вывода, полезно для простых клиентов.Для более сложного использования используйте asynchat.async_chat .

класс asyncore. file_dispatcher

File_dispatcher принимает файловый дескриптор или файловый объект вместе с необязательным аргументом карты и обертывает его для использования с опросом () или loop () функций. Если предоставлен файловый объект или что-либо с fileno () , этот метод будет вызван и передан в file_wrapper конструктор.

Доступность: Unix.

класс asyncore. file_wrapper

File_wrapper принимает целочисленный дескриптор файла и вызывает os.dup () , чтобы продублируйте ручку, чтобы исходная ручка могла быть закрыта независимо файла file_wrapper. Этот класс реализует достаточные методы для эмуляции сокет для использования классом file_dispatcher .

Доступность: Unix.

asyncore Пример базового HTTP-клиента

Вот очень простой HTTP-клиент, который использует класс диспетчера для реализовать обработку сокетов:

 импорт asyncore

класс HTTPClient (asyncore.диспетчер):

    def __init __ (я, хост, путь):
        asyncore.dispatcher .__ init __ (сам)
        self.create_socket ()
        self.connect ((хост, 80))
        self.buffer = bytes ('GET% s HTTP / 1.0 \ r \ nHost:% s \ r \ n \ r \ n'%
                            (путь, хост), 'ascii')

    def handle_connect (сам):
        проходить

    def handle_close (сам):
        self.close ()

    def handle_read (сам):
        печать (self.recv (8192))

    def записываемый (сам):
        возврат (len (self.buffer)> 0)

    def handle_write (сам):
        отправлено = сам.отправить (self.buffer)
        self.buffer = self.buffer [отправлено:]


клиент = HTTPClient ('www.python.org', '/')
asyncore.loop ()
 

asyncore Пример базового эхо-сервера

Вот базовый эхо-сервер, который использует класс диспетчера для приема подключений и отправляет входящие подключения обработчику:

 импорт asyncore

класс EchoHandler (asyncore.dispatcher_with_send):

    def handle_read (сам):
        data = self.recv (8192)
        если данные:
            себя.отправить (данные)

класс EchoServer (asyncore.dispatcher):

    def __init __ (я, хост, порт):
        asyncore.dispatcher .__ init __ (сам)
        self.create_socket ()
        self.set_reuse_addr ()
        self.bind ((хост, порт))
        самослушать (5)

    def handle_accepted (self, sock, addr):
        print ('Входящее соединение от% s'% repr (addr))
        handler = EchoHandler (носок)

сервер = EchoServer ('локальный хост', 8080)
asyncore.loop ()
 

3 Первое приложение asyncio · Параллелизм Python с asyncio MEAP V09

  • Как использовать сокеты для передачи данных по сети
  • Как использовать telnet для связи с приложением на основе сокетов
  • Проблемы с блокировкой сокетов и способы их решения с помощью неблокирующих сокетов
  • Использование селекторов для построения простого цикла событий для неблокирующих сокетов
  • Как использовать неблокирующие сокеты с циклом событий asyncio
  • Как создать неблокирующий эхо-сервер, допускающий несколько подключений
  • Как обрабатывать исключения в задачах
  • Как добавить пользовательскую логику выключения в приложение asyncio

3.1 Работа с блокирующими розетками

3.1.1 Подключение к серверу через telnet

3.1.2 Чтение и запись данных в и из сокета

3.1.3 Разрешение нескольких подключений и опасность блокировки

3.2 Работа с неблокирующими розетками

3.3 Использование модуля селекторов для создания цикла событий сокета

3.4 Эхо-сервер в цикле событий asyncio

3.4.1 Сопрограммы цикла событий для сокетов

3.4.2 Проектирование сервера asyncio echo

3.4.3 Обработка ошибок в задачах

3.5 Изящное завершение работы

3.5.1 Прослушивание сигналов

3.5.2 Ожидание завершения отложенных задач

3.6 Резюме

32.4. Socket Streams

( СОКЕТ: СОКЕТ-СЕРВЕР И ДОПОЛНИТЕЛЬНО порт И КЛЮЧ : ИНТЕРФЕЙС : BACKLOG )

Эта функция создает пассивный сокет и связывает порт к нему. Сервер существует для наблюдения за подключением клиента попытки.

Необязательный аргумент — это порт для использования (неотрицательный FIXNUM , 0 означает присвоенное системой).

Параметр : BACKLOG определяет максимальное длина очереди ожидающих подключений (см. слушать ) и по умолчанию 1.

Параметр : INTERFACE определяет интерфейс (ы), на котором сервер сокетов будет прослушивать, и является либо STRING , интерпретируется как интерфейс IP адрес, который будет bound, или сокет, с которого будут производиться соединения.

По умолчанию (для обратной совместимости) привязка ко всем локальным интерфейсы, но по соображениям безопасности рекомендуется привязать к шлейфовый интерфейс "127.0.0.1 " если вам нужны только локальные связи.

( SOCKET: SOCKET-SERVER-CLOSE socket-server )
Закрывает серверный сокет. Просто как и потоки, SOCKET: SOCKET-SERVER закрываются при сборке мусора. Однако вы не должны полагаться на это, потому что время сборки мусора не детерминированный, и порт, назначенный серверному сокету, не может быть используется повторно, пока он не будет закрыт.
( SOCKET: SOCKET-SERVER-HOST socket-server )
( SOCKET: SOCKET-SERVER-PORT socket-server )
Возвращает маску хоста какие хосты могут подключитесь к этому серверу и к порту, который был привязан с помощью SOCKET: SOCKET-SERVER .
( РОЗЕТКА: РОЗЕТКА-ОЖИДАНИЕ socket-server И ДОПОЛНИТЕЛЬНО [ секунд [ микросекунд ]])
Подождите фиксированное время для подключение к сокет-серверу (РОЗЕТКА : SOCKET-SERVER ). Без аргумента тайм-аута SOCKET: SOCKET-WAIT блокируется на неопределенный срок. Когда таймаут равен нулю, опрос. Возвращает T , если соединение доступно (т.е.е., SOCKET: SOCKET-ACCEPT будет не блокировать) и NIL по таймауту.
( РОЗЕТКА: СОКЕТ-ПРИНЯТЬ сокет-сервер & KEY : ELEMENT-TYPE : EXTERNAL-FORMAT : BUFFERED : TIMEOUT )

Ожидает попытки подключения к сокет-серверу и создает двунаправленное соединение SOCKET: SOCKET-STREAM на стороне сервера.

СИГНАЛ с ОШИБКА , если в это время не было установлено соединение.

( РОЗЕТКА: РОЗЕТКА порт и ДОПОЛНИТЕЛЬНО [ хост ] и КЛЮЧ : ELEMENT-TYPE : EXTERNAL-FORMAT : BUFFERED : TIMEOUT )
Попытки создать двунаправленный РОЗЕТКА: РОЗЕТКА-ПОТОК .Блокируется до тех пор, пока сервер не примет соединение, для не более : TIMEOUT секунды. Если он равен 0, немедленно возвращается и (возможно) блоки при следующей операции ввода-вывода (вы можете использовать SOCKET: SOCKET-STATUS , чтобы проверить, действительно ли он блокируется).
( РОЗЕТКА: СОСТОЯНИЕ РОЗЕТКИ сокет-поток-или-список И ДОПОЛНИТЕЛЬНО [ секунд [ микросекунд ]])

Проверяет возможность чтения или записи к SOCKET: SOCKET-STREAM или доступно ли соединение на РОЗЕТКА: РОЗЕТКА-СЕРВЕР без блокировки.

Это похоже на LISTEN , который проверяет только один STREAM и только для ввода, и SOCKET: SOCKET-WAIT , который работает только с РОЗЕТКА: РОЗЕТКА-СЕРВЕР с.

Мы определяем status для SOCKET: SOCKET-SERVER или SOCKET: SOCKET-STREAM быть : ОШИБКА , если любая операция ввода-вывода вызовет ОШИБКА .

Кроме того, для SOCKET: SOCKET-SERVER мы определяем статус должен быть T , если соединение доступно, т.е.е., равно SOCKET: SOCKET-ACCEPT не будет блокировать, а NIL в противном случае.

Кроме того, для SOCKET: SOCKET-STREAM мы определяем статус в задано направление (одно из : INPUT , : OUTPUT и : IO ), чтобы быть

Возможные значения статуса для различных направлений:

: INPUT статус:

NIL

чтение будет заблокировано

: INPUT

некоторый ввод доступен

: EOF

поток достиг своего конца

: ВЫХОД статус:

NIL

запись будет заблокирована

: OUTPUT

вывод в поток не будет блокироваться

: Состояние ввода-вывода :

1 9119 9119 9117 9117 : EOF 27: OUTP
Состояние вывода N0003
NIL NIL : INPUT : EOF
: ПРИЛОЖЕНИЕ

Если вы не хотите создавать новый список [3], вы можете сделать элементы socket-stream-or-list быть ( сокет-поток направление . x ) или ( сокет-сервер . x ) . Тогда SOCKET: SOCKET-STATUS деструктивно изменит свой аргумент и заменит x или NIL со статусом и вернуть измененный список. Вы можете снова передать этот измененный список в SOCKET: SOCKET-STATUS .

Необязательные аргументы указывают время ожидания. NIL означает ждать вечно, 0 означает опрос.

Второе возвращаемое значение - это количество объектов с не- NIL статус, т. е. «требующие действия» объекты. SOCKET: SOCKET-STATUS возвращается либо из-за тайм-аута, либо когда это число положительный, т.е. если тайм-аут был NIL и SOCKET: SOCKET-STATUS сделал return, тогда второе значение положительное (это причина NIL обрабатывается не как как пустой LIST , а как недопустимый аргумент).

Обратите внимание, что SOCKET: SOCKET-STATUS может SIGNAL a STREAM-ERROR . Это происходит, если SOCKET: SOCKET-STREAM получает пакет RST , см. tests / econnreset.lisp .

Это интерфейс для выберите (на некоторых платформах опрос ), поэтому он будет работать на любом CLISP STREAM , который основан на дескриптор файла, например, EXT: * KEYBOARD-INPUT * и файл / канал / сокет STREAM s, а также на сырых сокетах.

( SOCKET: SOCKET-STREAM-HOST socket-stream )
( SOCKET: SOCKET-STREAM-PORT socket-stream )
возвращают две функции информация о РОЗЕТКА: РОЗЕТКА-ПОТОК .
( РОЗЕТКА: РОЗЕТКА-ПОТОК-ПЕР socket-stream [ do-not-resolve-p ])

Учитывая SOCKET: SOCKET-STREAM , эта функция возвращает имя хоста на противоположной стороне соединения и его порт номер; серверная сторона может использовать это, чтобы увидеть, кто подключился.

Когда необязательный второй аргумент не NIL , имя хоста разрешение отключено, и возвращается только адрес IP , без полное доменное имя.

Аргумент socket-stream также может быть сырой сокет.

( РОЗЕТКА: РОЗЕТКА-ПОТОК-МЕСТНОЕ socket-stream [ do-not-resolve-p ])

Двойной к SOCKET: SOCKET-STREAM-PEER - та же информация, имя хоста и номер порта, но для локального хоста.Отличие от SOCKET: SOCKET-STREAM-HOST и SOCKET: SOCKET-STREAM-PORT заключается в том, что эта функция запрашивает ОС (и, таким образом, возвращает правильные доверенные значения), в то время как два других - просто средства доступа к внутренней структуре данных, и в основном возвращают аргументы, данные функции, которая создала сокет-поток .

Аргумент socket-stream также может быть сырой сокет.

( РАЗЪЕМ: РАЗЪЕМ-ПОТОК-ВЫКЛЮЧЕНИЕ сокет-поток направление )

Некоторые протоколы предусматривают закрытие соединения в одном направлении с использованием выключение . Эта функция обеспечивает интерфейс для этого системного вызова UNIX . направление должно быть : INPUT или : OUTPUT . Обратите внимание, что вы все равно следует позвонить ЗАКРЫТЬ после того, как вы закончите со своим socket-stream ; это лучше всего достигается с помощью С ОТКРЫТЫМ ПОТОКОМ .

Все SOCKET: SOCKET-STREAM двунаправленные STREAM s (т.е. обе INPUT-STREAM-P и OUTPUT-STREAM-P возвращают для них T ). SOCKET: SOCKET-STREAM-SHUTDOWN ломает this и меняет свой аргумент поток на вход STREAM (если direction - : OUTPUT ) или выход STREAM (если направление - : INPUT ).Таким образом, сохраняется следующий важный инвариант: всякий раз, когда

STREAM может быть прочитан (например, с READ-CHAR или READ-BYTE ).

Аргумент socket-stream также может быть сырой сокет.

( РОЗЕТКА: ОПЦИИ РОЗЕТКИ сокет-сервер и REST { опция } *)

Запрос и, при необходимости, установка параметров розетки с помощью getsockopt и setsockopt .Параметр - это ключевое слово, за которым может следовать новое значение. Если новое значение не предоставляется, setsockopt не вызывается. Для каждой опции старый (или текущий, если новое значение не было указано) значение возвращается. Например, ( РОЗЕТКА: ОПЦИИ РОЗЕТКИ сокет-сервер : SO-LINGER 1: SO-RCVLOWAT) возвращает 2 значения: NIL , старое значение опции : SO-LINGER и 1, текущее значение опции : SO-RCVLOWAT .

Аргумент socket-stream также может быть сырой сокет.

(РОЗЕТКА : РУЧКИ ПОТОКА поток )
Возвращает дескрипторы входных и выходных файлов ОС поток как несколько значений. См. Раздел 33.17, «Прямой доступ к сокетам».

18.5.1. Базовый цикл событий - документация Python 3.7.0a0

Цикл событий - это центральное исполнительное устройство, предоставляемое asyncio .Он предоставляет несколько объектов, в том числе:

  • Регистрация, выполнение и отмена отложенных вызовов (таймауты).
  • Создание клиентского и серверного транспорта для различных виды общения.
  • Запуск подпроцессов и связанных транспортов для связи с внешней программой.
  • Делегирование дорогостоящих вызовов функций пулу потоков.
класс asyncio. BaseEventLoop

Этот класс является деталью реализации.Это подкласс AbstractEventLoop и может быть базовым классом бетона. реализации цикла событий, найденные в asyncio . Не должно использоваться напрямую; используйте вместо него AbstractEventLoop . BaseEventLoop не должен быть подклассом стороннего кода; в внутренний интерфейс нестабилен.

класс asyncio. АннотацияEventLoop

Абстрактный базовый класс циклов событий.

Этот класс не является потокобезопасным.

18.5.1.1. Запустить цикл событий

AbstractEventLoop. run_forever ()

Работать до вызова stop () . Если stop () вызывается до run_forever () вызывается, это опрашивает селектор ввода / вывода один раз с нулевым таймаутом запускает все обратные вызовы, запланированные в ответ на События ввода-вывода (и те, которые уже были запланированы), а затем завершается. Если stop () вызывается во время работы run_forever () , это запустит текущий пакет обратных вызовов и затем выйдет.Примечание что обратные вызовы, запланированные обратными вызовами, не будут выполняться в этом случае; они будут запущены при следующем вызове run_forever () .

Изменение для версии 3.5.1.

AbstractEventLoop. run_until_complete ( будущее )

Выполнять до завершения Future .

Если аргумент является объектом сопрограммы, он оборачивается sure_future () .

Вернуть результат Future или вызвать его исключение.

AbstractEventLoop. is_running ()

Возвращает текущий статус цикла событий.

AbstractEventLoop. остановка ()

Остановить цикл событий.

Это приводит к завершению run_forever () при следующем подходящем возможность (подробнее см. там).

Изменение для версии 3.5.1.

AbstractEventLoop. закрыто ()

Возвращает Истина , если цикл событий был закрыт.

Nouveau в версии 3.4.2.

AbstractEventLoop. закрыть ()

Закройте цикл обработки событий. Цикл не должен быть запущен. В ожидании обратные вызовы будут потеряны.

Это очищает очереди и завершает работу исполнителя, но не ждет исполнитель доделать.

Это идемпотентно и необратимо.Никакие другие методы не должны вызываться после Вот этот.

сопрограмма AbstractEventLoop. shutdown_asyncgens ()

Запланировать все открытые в данный момент объекты асинхронного генератора на закрыть с помощью вызова aclose () . После вызова этого метода цикл событий будет выдавать предупреждение всякий раз, когда новый асинхронный генератор повторяется. Следует использовать для завершения всех запланированных асинхронных генераторы надежно. Пример:

 попробуйте:
    петля.run_forever ()
наконец-то:
    loop.run_until_complete (loop.shutdown_asyncgens ())
    loop.close ()
 

Nouveau dans la version 3.6.

18.5.1.2. Звонки

Большинство функций asyncio не принимают ключевые слова. Если ты хочешь пройти ключевые слова для вашего обратного вызова, используйте functools.partial () . Например, loop.call_soon (functools.partial (print, "Hello", flush = True)) вызовет print ("Привет", flush = True) .

AbstractEventLoop. call_soon ( обратный вызов , * args )

Организуйте обратный звонок как можно скорее. Обратный вызов вызывается после возврата call_soon () , когда управление возвращается к событию петля.

Работает как очередь FIFO , обратные вызовы вызываются в том порядке, в котором они зарегистрированы. Каждый обратный звонок будет вызван ровно один раз.

Любые позиционные аргументы после обратного вызова будут переданы в обратный вызов при его вызове.

Возвращается экземпляр asyncio.Handle , который может быть используется для отмены обратного вызова.

Используйте functools.partial для передачи ключевых слов в функцию обратного вызова.

AbstractEventLoop. call_soon_threadsafe ( обратный вызов , * args )

Как call_soon () , но потокобезопасный.

Посмотрите на параллелизм и многопоточность раздел документации.

18.5.1.3. Отсроченные звонки

Цикл событий имеет собственные внутренние часы для вычисления таймаутов. Какие часы используются, зависит от цикла событий (зависящего от платформы). выполнение; в идеале это монотонные часы. Обычно это будет часы, отличные от time.time () .

Примечание

Таймауты (относительная задержка или абсолютная при ) не должны превышать одного дня.

AbstractEventLoop. call_later ( задержка , обратный вызов , * args )

Организовать вызов обратного вызова после заданной задержки секунды (либо int, либо float).

Возвращается экземпляр asyncio.Handle , который может быть используется для отмены обратного вызова.

обратный вызов будет вызываться ровно один раз за звонок на call_later () . Если два обратных вызова запланированы на одно и то же время, это undefined, который будет вызван первым.

Необязательный позиционный аргумент будет передан обратному вызову, когда он называется. Если вы хотите, чтобы обратный вызов вызывался с некоторым именем arguments используйте закрытие или functools.частичный () .

Используйте functools.partial для передачи ключевых слов в функцию обратного вызова.

AbstractEventLoop. call_at ( при , обратный вызов , * args )

Организовать вызов обратного вызова в заданную абсолютную временную метку , когда (int или float), используя ту же ссылку времени, что и AbstractEventLoop.time () .

Поведение этого метода такое же, как call_later () .

Возвращается экземпляр asyncio.Handle , который может быть используется для отмены обратного вызова.

Используйте functools.partial для передачи ключевых слов в функцию обратного вызова.

AbstractEventLoop. время ()

Возвращает текущее время как значение с плавающей запятой , в соответствии с внутренние часы цикла событий.

18.5.1.4. Фьючерс

AbstractEventLoop. create_future ()

Создайте asyncio .Объект Future прикреплен к петле.

Это предпочтительный способ создания фьючерсов в asyncio, поскольку событие реализации цикла могут предоставлять альтернативные реализации класса Future (с лучшей производительностью или оснащением).

Nouveau в версии 3.5.2.

18.5.1.5. Задачи

AbstractEventLoop. create_task ( coro )

Запланировать выполнение объекта сопрограммы: обернуть его в будущее.Вернуть объект Task .

Сторонние циклы событий могут использовать собственный подкласс Task для совместимость. В этом случае тип результата является подклассом Задача .

Этот метод был добавлен в Python 3.4.2. Используйте функцию async () для поддерживает также более старые версии Python.

Nouveau в версии 3.4.2.

AbstractEventLoop. set_task_factory ( завод )

Установить фабрику задач, которая будет использоваться AbstractEventLoop.create_task () .

Если factory - None будет установлена ​​фабрика задач по умолчанию.

Если factory - это вызываемый , он должен иметь соответствующую подпись (loop, coro) , где loop будет ссылкой на активный цикл событий, coro будет объектом сопрограммы. Вызываемый должен возвращать asyncio.Future -совместимый объект.

Nouveau в версии 3.4.4.

AbstractEventLoop. get_task_factory ()

Вернуть фабрику задач или Нет , если используется фабрика по умолчанию.

Nouveau в версии 3.4.4.

18.5.1.6. Создание соединений

сопрограмма AbstractEventLoop. create_connection ( protocol_factory , host = None , port = None , * , ssl = None , family = 0 , proto = 0 , flags = 0 , sock = Нет , local_addr = Нет , server_hostname = Нет )

Создание потокового транспортного соединения с заданным Интернет-хостом и порт : семейство сокетов AF_INET или AF_INET6 в зависимости от хоста (или семейства , если указано), Тип розетки SOCK_STREAM . protocol_factory должен быть вызываемый, возвращающий экземпляр протокола.

Этот метод представляет собой сопрограмму, которая пытается установить соединение в фоновом режиме. В случае успеха сопрограмма возвращает пару (транспорт, протокол) .

Хронологический синопсис основной операции выглядит следующим образом:

  1. Соединение установлено, транспорт создан, чтобы представлять его.
  2. protocol_factory вызывается без аргументов и должен возвращать экземпляр протокола.
  3. Экземпляр протокола привязан к транспорту, и его connection_made () Вызывается метод .
  4. Сопрограмма успешно возвращается с кодом (транспорт, протокол) пара.

Созданный транспорт является зависящим от реализации двунаправленным потоком.

Примечание

protocol_factory может быть любой вид вызываемого, не обязательно класс. Например, если вы хотите использовать предварительно созданный экземпляр протокола, вы можете передать лямбда: my_protocol .

Параметры, изменяющие способ создания подключения:

  • ssl : если задано, а не false, создается транспорт SSL / TLS (по умолчанию создается простой транспорт TCP). Если ssl - это объект ssl.SSLContext , этот контекст используется для создания транспорт; если ssl - True , контекст с некоторыми используются неуказанные настройки по умолчанию.

  • server_hostname , только для использования вместе с ssl , и устанавливает или переопределяет имя хоста, которое сертификат целевого сервера будет сравниваться с.По умолчанию значение аргумента host используется. Если хост пуст, по умолчанию нет, и вы должны передать значение для server_hostname . Если server_hostname пустое строка, сопоставление имен хостов отключено (что является серьезной мерой безопасности риск, допускающий атаки типа "злоумышленник посередине").

  • семейство , прото , флаги - дополнительное семейство адресов, протокол и флаги, передаваемые в getaddrinfo () для разрешения хоста и .Если задано, все они должны быть целыми числами из соответствующих Константы модуля socket .

  • носок , если таковой имеется, должен быть существующим, уже подключенным socket.socket объект, который будет использовать транспорт. Если указано sock , ни один из host , port , family , proto , flags и local_addr должны быть указаны.

  • local_addr , если он задан, используется кортеж (local_host, local_port) чтобы привязать сокет локально. local_host и local_port ищутся с помощью getaddrinfo (), аналогично хосту и порту .

Изменение для версии 3.5: в Windows с ProactorEventLoop теперь поддерживается SSL / TLS.

сопрограмма AbstractEventLoop. create_datagram_endpoint ( protocol_factory , local_addr = None , remote_addr = None , * , family = 0 , proto = 0 , flags = 0 , reuse_address = None reuse_port = Нет , allow_broadcast = Нет , sock = Нет )

Создать соединение дейтаграммы: семейство сокетов AF_INET или AF_INET6 в зависимости от хоста (или семейства , если указано), Тип розетки SOCK_DGRAM . protocol_factory должен быть вызываемый, возвращающий экземпляр протокола.

Этот метод представляет собой сопрограмму, которая пытается установить соединение в фоновом режиме. В случае успеха сопрограмма возвращает пару (транспорт, протокол) .

Опции, изменяющие способ создания соединения:

  • local_addr , если задано, используется кортеж (local_host, local_port) чтобы привязать сокет локально. local_host и local_port ищутся с помощью getaddrinfo () .
  • remote_addr , если задан, используется кортеж (remote_host, remote_port) для подключения сокета к удаленному адресу. remote_host, и remote_port ищутся с помощью getaddrinfo () .
  • Семейство , proto , флаги - дополнительное семейство адресов, протокол и флаги, передаваемые в getaddrinfo () для хоста разрешающая способность. Если задано, все они должны быть целыми числами из соответствующие константы модуля socket .
  • reuse_address сообщает ядру повторно использовать локальный сокет в TIME_WAIT, не дожидаясь естественного тайм-аута до истек. Если не указано, будет автоматически установлено значение True на UNIX.
  • reuse_port сообщает ядру разрешить привязку этой конечной точки к тот же порт, к которому привязаны другие существующие конечные точки, если все они установить этот флаг при создании. Эта опция не поддерживается в Windows. и некоторые UNIX. Если константа SO_REUSEPORT не является определено, то эта возможность не поддерживается.
  • allow_broadcast сообщает ядру разрешить этой конечной точке отправлять сообщения на широковещательный адрес.
  • носок может быть дополнительно указан для использования ранее существовавшего, уже подключен, объект socket.socket будет использоваться транспорт. Если указано, local_addr и remote_addr следует опустить. (должно быть Нет ).

В Windows с ProactorEventLoop этот метод не поддерживается.

См. Протокол эхо-клиента UDP и Примеры протокола эхо-сервера UDP.

сопрограмма AbstractEventLoop. create_unix_connection ( protocol_factory , path , * , ssl = None , sock = None , server_hostname = None )

Создать соединение UNIX: семейство сокетов AF_UNIX , сокет введите SOCK_STREAM . Розетка AF_UNIX семейство используется для связи между процессами на одной машине эффективно.

Этот метод представляет собой сопрограмму, которая пытается установить соединение в фоновом режиме. В случае успеха сопрограмма возвращает пару (транспорт, протокол) .

путь - это имя сокета домена UNIX и требуется, если только сокет параметр указан. Абстрактные сокеты UNIX, str и байта Поддерживаются пути.

См. Параметры метода AbstractEventLoop.create_connection () .

Доступность: UNIX.

18.5.1.7. Создание прослушивающих подключений

сопрограмма AbstractEventLoop. create_server ( protocol_factory , host = None , port = None , * , family = socket.AF_UNSPEC , flags = socket.AI_PASSIVE , sock = None , backlog = 100 , ssl = Нет , reuse_address = Нет , reuse_port = Нет )

Создайте TCP-сервер (тип сокета SOCK_STREAM ), привязанный к хост и порт .

Вернуть объект Server , его сокетов атрибут содержит созданные сокеты. Используйте метод Server.close () , чтобы остановить сервер: закрыть сокеты для прослушивания.

Параметры:

  • Параметр хоста может быть строкой, в этом случае TCP-сервер привязан к хосту и порту . Параметр host также может быть последовательностью строк, и в этом случае TCP-сервер привязан ко всем хостам последовательность.Если host - пустая строка или None , все интерфейсы предполагается, и будет возвращен список из нескольких сокетов (скорее всего, один для IPv4 и еще один для IPv6).
  • семейство может быть установлено на сокет . AF_INET или AF_INET6 , чтобы сокет использовал IPv4 или IPv6. Если не установлен он будет определяться с хоста (по умолчанию socket.AF_UNSPEC ).
  • flags - это битовая маска для getaddrinfo () .
  • носок может быть дополнительно указан для использования ранее существовавшего объект сокета. Если указано, хост и порт должны быть опущены (должны быть Нет ).
  • backlog - максимальное количество подключений в очереди, переданных на listen () (по умолчанию 100).
  • ssl можно установить на SSLContext , чтобы включить SSL через принятые соединения.
  • reuse_address сообщает ядру повторно использовать локальный сокет в TIME_WAIT, не дожидаясь естественного тайм-аута до истек.Если не указано, будет автоматически установлено значение True на UNIX.
  • reuse_port сообщает ядру разрешить привязку этой конечной точки к тот же порт, к которому привязаны другие существующие конечные точки, если все они установить этот флаг при создании. Эта опция не поддерживается на Windows.

Этот метод является сопрограммой.

Изменение для версии 3.5: в Windows с ProactorEventLoop теперь поддерживается SSL / TLS.

Modifié dans la version 3.5.1: Параметр host теперь может быть последовательностью строк.

сопрограмма AbstractEventLoop. create_unix_server ( protocol_factory , path = None , * , sock = None , backlog = 100 , ssl = None )

Аналогично AbstractEventLoop.create_server () , но специфичен для Семейство сокетов AF_UNIX .

Этот метод является сопрограммой.

Доступность: UNIX.

сопрограмма BaseEventLoop. connect_accepted_socket ( protocol_factory , sock , * , ssl = None )

Обрабатывать допустимое соединение.

Используется серверами, которые принимают подключения за пределами asyncio, но для их обработки используется asyncio.

Параметры:

  • sock - это уже существующий объект сокета, возвращенный из accept вызов.
  • ssl можно установить на SSLContext , чтобы включить SSL через принятые соединения.

Этот метод является сопрограммой. По завершении сопрограмма возвращает пару (транспорт, протокол) .

18.5.1.9. Операции с гнездами низкого уровня

сопрограмма AbstractEventLoop. sock_recv ( sock , nbytes )

Получение данных от сокета.Смоделировано после блокировки socket.socket.recv () метод.

Возвращаемое значение - байтовый объект. представляющие полученные данные. Максимальный объем получаемых данных сразу указано nbytes .

С циклом событий SelectorEventLoop сокет sock должен быть неблокирующий.

Этот метод является сопрограммой.

сопрограмма AbstractEventLoop. sock_sendall ( носок , данные )

Отправить данные в сокет.Смоделировано после блокировки socket.socket.sendall () метод.

Розетка должна быть подключена к удаленной розетке. Этот метод продолжает отправлять данные из данных до тех пор, пока все данные не будут было отправлено или произошла ошибка. Нет возвращается в случае успеха. При ошибке возникает исключение, и невозможно определить, сколько данных, если любой, был успешно обработан принимающей стороной соединения.

С циклом событий SelectorEventLoop сокет sock должен быть неблокирующий.

Этот метод является сопрограммой.

сопрограмма AbstractEventLoop. sock_connect ( sock , адрес )

Подключиться к удаленному сокету по адресу , . Создан по образцу блокирующий метод socket.socket.connect () .

С циклом событий SelectorEventLoop сокет sock должен быть неблокирующий.

Этот метод является сопрограммой.

Modifié для версии 3.5.2: адрес больше не требует разрешения. sock_connect попытается проверить, разрешен ли уже адрес , позвонив socket.inet_pton () . Если не, AbstractEventLoop.getaddrinfo () будет использоваться для разрешения адрес .

сопрограмма AbstractEventLoop. sock_accept ( носок )

Принять соединение.Смоделировано после блокировки socket.socket.accept () .

Сокет должен быть привязан к адресу и прослушивать для подключений. Возвращаемое значение - пара (conn, address) , где conn - это новый объект сокета , используемый для отправки и получения данных о соединении, а адрес - это адрес, привязанный к сокету на другом конце связь.

Гнездо , гнездо должно быть неблокирующим.

Этот метод является сопрограммой.

18.5.1.10. Разрешить имя хоста

сопрограмма AbstractEventLoop. getaddrinfo ( хост , порт , * , семейство = 0 , type = 0 , proto = 0 , flags = 0 )

Этот метод является сопрограммой, похожей на socket.getaddrinfo () функция, но не блокирующая.

сопрограмма AbstractEventLoop. getnameinfo ( sockaddr , flags = 0 )

Этот метод является сопрограммой, похожей на socket.getnameinfo () функция, но не блокирующая.

18.5.1.11. Соединительные трубы

В Windows с SelectorEventLoop эти методы не поддерживаются. Используйте ProactorEventLoop для поддержки каналов в Windows.

сопрограмма AbstractEventLoop. connect_read_pipe ( протокол_фабрика , труба )

Конвейер чтения регистров в цикле событий.

protocol_factory должен создать экземпляр объекта с протоколом интерфейс. pipe - файловый объект. Возвратная пара (транспорт, протокол) , где транспорт поддерживает Интерфейс ReadTransport .

С циклом событий SelectorEventLoop канал установлен на неблокирующий режим.

Этот метод является сопрограммой.

сопрограмма AbstractEventLoop. connect_write_pipe ( фабрика протоколов , труба )

Канал записи регистров в цикле событий.

protocol_factory должен создать экземпляр объекта с BaseProtocol интерфейс. pipe - файловый объект. Возвратная пара (транспорт, протокол) , где транспорт поддерживает Интерфейс WriteTransport .

С циклом событий SelectorEventLoop канал установлен на неблокирующий режим.

Этот метод является сопрограммой.

18.5.1.12. Сигналы UNIX

Доступность: только для UNIX.

AbstractEventLoop. add_signal_handler ( signum , обратный вызов , * args )

Добавьте обработчик сигнала.

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

Используйте functools.partial для передачи ключевых слов в функцию обратного вызова.

AbstractEventLoop. remove_signal_handler ( sig )

Снимите обработчик сигнала.

Вернуть Истина , если обработчик сигнала был удален, Ложь , если нет.

18.5.1.13. Исполнитель

Вызов функции в Executor (пул потоков или пул процессов). По умолчанию в цикле событий используется исполнитель пула потоков. ( ThreadPoolExecutor ).

сопрограмма AbstractEventLoop. run_in_executor (исполнитель , func , * args )

Организовать вызов функции func в указанном исполнителе.

Аргумент исполнителя должен быть исполнитель пример. Исполнитель по умолчанию используется, если исполнитель - Нет .

Используйте functools.partial для передачи ключевых слов в * func *.

Этот метод является сопрограммой.

Изменение для версии 3.5.3: BaseEventLoop.run_in_executor () больше не настраивает max_workers созданного им исполнителя пула потоков, вместо этого оставив это исполнителю пула потоков ( ThreadPoolExecutor ), чтобы установить По умолчанию.

AbstractEventLoop. set_default_executor ( Executor )

Установить исполнитель по умолчанию, используемый run_in_executor () .

18.5.1.14. API обработки ошибок

Позволяет настроить обработку исключений в цикле событий.

AbstractEventLoop. set_exception_handler ( обработчик )

Установить обработчик как новый обработчик исключений цикла событий.

Если обработчик равен Нет , обработчик исключений по умолчанию будет быть установлен.

Если обработчик является вызываемым объектом, он должен иметь соответствие подписи (цикл, контекст) , где цикл будет ссылкой на активный цикл событий, контекст будет объектом dict (см. call_exception_handler () документацию для получения подробной информации о контексте).

AbstractEventLoop. get_exception_handler ()

Вернуть обработчик исключения или Нет , если используется по умолчанию уже используется.

Nouveau в версии 3.5.2.

AbstractEventLoop. default_exception_handler ( контекст )

Обработчик исключений по умолчанию.

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

контекст параметр имеет то же значение, что и в call_exception_handler () .

AbstractEventLoop. call_exception_handler ( контекст )

Вызвать обработчик исключения текущего цикла событий.

контекст - это объект dict , содержащий следующие ключи (новые ключи могут быть введены позже):

  • «сообщение»: сообщение об ошибке;
  • «исключение» (необязательно): объект исключения;
  • «будущее» (необязательно): asyncio.Будущий экземпляр ;
  • «дескриптор» (необязательно): asyncio.Handle instance;
  • «протокол» (необязательно): экземпляр протокола;
  • «транспорт» (необязательно): экземпляр транспорта;
  • ‘socket’ (необязательно): socket.socket instance.

Примечание

Примечание: этот метод не следует перегружать в подклассах. петли событий. Для любой настраиваемой обработки исключений используйте set_exception_handler () метод.

18.5.1.15. Режим отладки

AbstractEventLoop. get_debug ()

Получить режим отладки ( bool ) цикла событий.

Значение по умолчанию - Истинно , если переменная среды PYTHONASYNCIODEBUG установлена ​​в непустую строку, False иначе.

Nouveau в версии 3.4.2.

AbstractEventLoop. set_debug ( включено: bool )

Установите режим отладки цикла событий.

Nouveau в версии 3.4.2.

18.5.1.16. Сервер

класс asyncio. Сервер

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

Объект, созданный методом AbstractEventLoop.create_server () и start_server () функция. Не создавайте экземпляр класса напрямую.

закрыть ()

Прекратить обслуживание: закрыть сокеты прослушивания и установить сокетов атрибут Нет .

Сокеты, которые представляют существующие входящие клиентские подключения, оставлены открыто.

Сервер закрывается асинхронно, используйте wait_closed () сопрограмма, чтобы дождаться закрытия сервера.

сопрограмма wait_closed ()

Дождитесь завершения метода close () .

Этот метод является сопрограммой.

розетки

Список розеток .socket объекты, которые сервер слушает, или Нет , если сервер закрыт.

18.5.1.18. Примеры цикла событий

18.5.1.18.1. Привет, мир с call_soon ()

Пример использования метода AbstractEventLoop.call_soon () для планирования Перезвоните. Обратный вызов отображает «Hello World» , а затем останавливает событие. цикл:

 импорт asyncio

def hello_world (цикл):
    print ('Привет, мир')
    петля.останавливаться()

цикл = asyncio.get_event_loop ()

# Запланируйте вызов hello_world ()
loop.call_soon (hello_world, цикл)

# Блокирующий вызов, прерванный loop.stop ()
loop.run_forever ()
loop.close ()
 

18.5.1.18.2. Отображение текущей даты с call_later ()

Пример обратного вызова, отображающего текущую дату каждую секунду. Обратный вызов использует метод AbstractEventLoop.call_later () для перепланирования себя в течение 5 секунд, а затем останавливает цикл событий:

 импорт asyncio
дата и время импорта

def display_date (end_time, цикл):
    печать (datetime.datetime.now ())
    если (loop.time () + 1.0) 

18.5.1.18.3. Следите за файловым дескриптором на предмет событий чтения

Подождите, пока файловый дескриптор получит данные, используя AbstractEventLoop.add_reader () , а затем закрыть цикл обработки событий:

 импорт asyncio
пытаться:
    из сокета import socketpair
кроме ImportError:
    из asyncio.windows_utils import socketpair

# Создаем пару связанных файловых дескрипторов
rsock, wsock = socketpair ()
цикл = asyncio.get_event_loop ()

def reader ():
    data = rsock.recv (100)
    print ("Получено:", data.decode ())
    # Готово: отмените регистрацию дескриптора файла
    loop.remove_reader (rsock)
    # Остановить цикл событий
    loop.stop ()

# Регистрируем файловый дескриптор для события чтения
петля.add_reader (rsock, читатель)

# Имитировать прием данных из сети
loop.call_soon (wsock.send, 'abc'.encode ())

# Запускаем цикл событий
loop.run_forever ()

# Готово, закрываем сокеты и цикл обработки событий
rsock.close ()
wsock.close ()
loop.close ()
 

18.5.1.18.4. Установите обработчики сигналов для SIGINT и SIGTERM

Регистрируйте обработчики сигналов SIGINT и SIGTERM , используя метод AbstractEventLoop.add_signal_handler () :

 импорт asyncio
import functools
импорт ОС
импортный сигнал

def ask_exit (подпись):
    print ("получен сигнал% s: выход"% signame)
    петля.останавливаться()

цикл = asyncio.get_event_loop ()
для входа в систему ('SIGINT', 'SIGTERM'):
    loop.add_signal_handler (getattr (сигнал, имя),
                            functools.partial (ask_exit, signame))

print («Цикл событий работает вечно, нажмите Ctrl + C, чтобы прервать.»)
print ("pid% s: отправьте SIGINT или SIGTERM для выхода."% os.getpid ())
пытаться:
    loop.run_forever ()
наконец-то:
    loop.close ()
 

Этот пример работает только в UNIX.

Учебник по сокету Asyncio. Как создать веб-сервер ASGI, например… | by Philip Jones

Как создать веб-сервер ASGI, например Hypercorn

. Существует множество руководств и статей по asyncio, в которых основное внимание уделяется сопрограммам, циклу событий и простым примитивам.Меньше тех, кто сосредоточен на использовании сокетов для прослушивания или отправки соединений. В этой статье показано, как создать простой веб-сервер.

Это основано на разработке Hypercorn, который представляет собой сервер ASGI, поддерживающий HTTP / 1, HTTP / 2 и Websockets. Код Hypercorn - это продолжение этой статьи.

Эхо-сервер - это самое простое место для запуска, и по определению он просто возвращает клиенту любые отправленные данные. Поскольку мы стремимся создать веб-сервер, TCP (протокол) имеет смысл.

Asyncio имеет два варианта высокого уровня для написания серверов: на основе обратного вызова или на основе потоков. Я думаю, что последний концептуально более понятен, но, как было показано, имеет худшую производительность. Итак, мы сделаем и то, и другое, начиная с потоковой передачи (также обратите внимание, что я буду использовать функции Python3.7, такие как serve_forever),

 import asyncioasync def echo_server (reader, writer): 
while True:
data = await reader.read (100) # Максимальное количество байтов для чтения
, если не данные:
break
writer.write (data)
await writer.drain () # Управление потоком, см. позже
writer.close () async def main (host, port):
server = await asyncio.start_server (echo_server, host, port)
await server. serve_forever () asyncio.run (main ('127.0.0.1', 5000))

Если вы запустите этот код, а затем подключитесь через telnet localhost 5000 или аналогичный, вы должны увидеть, как сервер возвращает все отправленные данные. Эквивалентный код с использованием обратных вызовов, называемый протоколом,

 import asyncioclass EchoProtocol (asyncio.Протокол): def connection_made (self, transport): 
self.transport = transport def data_received (self, data):
self.transport.write (data) async def main (host, port):
loop = asyncio.get_running_loop ( )
server = await loop.create_server (EchoProtocol, host, port)
await server.serve_forever () asyncio.run (main ('127.0.0.1', 5000))

Теперь мы можем открыть сокет для прослушивания подключений и ответить, мы можем добавить HTTP в качестве протокола связи, а затем получить веб-сервер.Для начала давайте просто вернем эхом важные части HTTP-сообщения, то есть глагол, цель запроса и любые заголовки.

На этом этапе нам нужно прочитать RFC 7230 и написать анализатор HTTP или использовать тот, который уже существует. Последнее намного проще, а h21 - это фантастика, поэтому мы воспользуемся этим.

Помимо h21

h21 - это библиотека sans-io, это означает, что она управляет HTTP-соединением без управления вводом-выводом. На практике это означает, что любые полученные байты должны быть переданы в соединение h21, а любые байты, которые должны быть отправлены, должны быть получены из соединения h21, что позволяет объекту соединения h21 управлять состоянием HTTP.

В качестве примера ниже приведена простая последовательность ответа на запрос, обратите внимание, как полученные байты должны быть переданы в h21 и как данные ответа предоставляются h21,

 import h21connection = h21.Connection (h21.SERVER) 
connection. receive_data (
b "GET / path HTTP / 1.1 \ r \ nHost: localhost: 5000 \ r \ n \ r \ n",
)
request = connection.next_event ()
# request.method == b "GET"
# request.target == b "/ path"
data = connection.send (h21.Response (status_code = 200))
# data == b "HTTP / 1.1 200 "

Базовый HTTP-сервер

Мы остановимся на сервере протокола, исходя из производительности, и добавим h21,

 import asyncio 
import h21class HTTPProtocol (asyncio.Protocol): def __init __ (self):
self.connection = h21.Connection (h21.SERVER) def connection_made (self, Transport):
self.transport = transport def data_received (self, data):
self.connection.receive_data (data)
while True:
event = self.connection.next_event ()
, если isinstance (event, h21.Request):
self.send_response (event)
elif (
isinstance (event, h21.ConnectionClosed)
или событие h21.NEED_DATA или событие h21.PAUSED
):
break
, если self.connection.our_state - h21. MUST_CLOSE:
self.transport.close () def send_response (self, event):
body = b "% s% s"% (event.method.upper (), event.target)
headers = [
('content -type ',' text / plain '),
(' content-length ', str (len (body))),
]
response = h21.Response (status_code = 200, headers = headers)
self.send (ответ)
self.send (h21.Data (data = body))
self.send (h21.EndOfMessage ())

def send (self, event):
data = self.connection.send (событие)
self.transport.write (данные)

async def main (хост, порт):
loop = asyncio.get_running_loop ()
server = await loop.create_server (HTTPProtocol, host, port)
await server.serve_forever () asyncio.run (main ('127.0.0.1', 5000))

Если вы запустите этот код и сделаете HTTP-запрос, например curl localhost: 5000 / path вы получите GET / path обратно.

Хотя выше приведен базовый HTTP-сервер, мы должны добавить управление потоком и тайм-ауты, чтобы гарантировать, что он не подвергнется простой атаке. Эти атаки обычно пытаются исчерпать ресурсы сервера (сокеты, память, процессор…), чтобы он больше не мог обслуживать новые соединения.

Таймауты

Для начала рассмотрим вредоносного клиента, который открывает множество подключений к серверу и удерживает их открытыми, ничего не делая. Это исчерпывает все подключения сервера, тем самым предотвращая подключение кого-либо еще.

Для борьбы с этим сервер должен отключать бездействующее соединение по таймауту, то есть ждать определенное время, пока клиент что-то сделает, а затем закрыть соединение, если это не так. Используя сервер протокола, это можно сделать следующим образом:

 import asyncioTIMEOUT = 1 # Secondclass TimeoutServer (asyncio.Protocol): def __init __ (self): 
loop = asyncio.get_running_loop ()
self.timeout_handle = loop.call_later (
TIMEOUT, self._timeout,
) def connection_made (self, transport):
self.transport = transport def data_received (self, data):
self.timeout_handle.cancel () def _timeout (self):
self.transport.close ()

Управление потоком

В начальном примере эхо-сервера у нас было await writer .drain () , поскольку это приостановило сопрограмму от записи дополнительных данных в сокет до тех пор, пока клиент не догнал их, он опустошил сокет. Это полезно, поскольку до тех пор, пока клиент не догонит, данные будут храниться в памяти, поэтому злонамеренный клиент может сделать много запросов для большого количества данных, отказаться от получения данных и позволить серверу исчерпать свою память.

Для борьбы с этим сопрограмма, отправляющая данные, должна ожидать функцию слива, которую можно добавить в протокол,

 import asyncioclass FlowControlServer (asyncio.Protocol): def __init __ (self): 
self._can_write = asyncio.Event ()
self._can_write.set () def pause_writing (self) -> None:
# Будет вызываться всякий раз, когда транспорт пересекает отметку максимума
#.
self._can_write.clear () def resume_writing (self) -> None:
# Будет вызываться всякий раз, когда транспорт упадет ниже отметки низкого уровня
#.
self._can_write.set () async def Drain (self) -> None:
await self._can_write.wait ()

Это действительно все, что есть в отношении asyncio для создания сервера ASGI. Чтобы продолжить, вам нужно добавить конвейерную обработку, конструкции ASGI, тело запроса и потоковую передачу, как это сделано в файле Hypercorn h21.py. См. Также библиотеки h3 и wsproto для эквивалентов HTTP / 2 и Websocket для h21.

select - ожидание ввода-вывода эффективно

Модуль select обеспечивает доступ к вводу-выводу, зависящему от платформы функции мониторинга.Самый портативный интерфейс - POSIX. функция select (), доступная в Unix и Windows. В модуль также включает poll (), API только для Unix и несколько параметры, которые работают только с определенными вариантами Unix.

выберите ()

Функция Python select () является прямым интерфейсом к базовая реализация операционной системы. Он контролирует розетки, открытые файлы и каналы (все, что имеет метод fileno (), который возвращает действительный дескриптор файла), пока они не станут доступными для чтения или записи, или происходит ошибка связи.select () упрощает мониторинг несколько подключений одновременно, и это более эффективно, чем написание цикла опроса в Python с использованием тайм-аутов сокетов, потому что мониторинг происходит на сетевом уровне операционной системы, а не на переводчик.

Примечание

Использование файловых объектов Python с select () работает для Unix, но не поддерживается в Windows.

Пример эхо-сервера из секции сокетов может быть расширен следить за более чем одним подключением одновременно с помощью Выбрать().Новая версия начинается с создания неблокирующего Сокет TCP / IP и его настройка для прослушивания адреса.

 импорт выбрать
импортный сокет
import sys
очередь импорта

# Создать сокет TCP / IP
server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
server.setblocking (0)

# Привязать сокет к порту
server_address = ('локальный хост', 10000)
print >> sys.stderr, 'запуск на% s порт% s'% server_address
server.bind (адрес_сервера)

# Слушать входящие соединения
server.listen (5)
 

Аргументы select () - три списка, содержащие каналы связи для мониторинга.Первый - это список объектов. для проверки входящих данных для чтения, второй содержит объекты, которые будут получать исходящие данные, когда в их буфер, а третий - те, в которых может быть ошибка (обычно комбинация объектов входного и выходного каналов). Следующий шаг на сервере - настроить списки, содержащие источники ввода и назначения вывода, передаваемые в select ().

 # Сокеты, из которых мы ожидаем читать
input = [сервер]

# Сокеты, в которые мы собираемся писать
выходы = []
 

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

 # Очереди исходящих сообщений (socket: Queue)
message_queues = {}
 

Основная часть серверной программы зацикливается, вызывая select () для заблокировать и дождаться сетевой активности.

, а входы:

    # Подождите, пока хотя бы один из сокетов будет готов к обработке
    печать >> sys.stderr, '\ nв ожидании следующего события'
    читаемый, доступный для записи, исключительный = select.select (входы, выходы, входы)
 

select () возвращает три новых списка, содержащих подмножества содержимое переданных списков. Все сокеты в в читаемом списке входящие данные буферизированы и доступны для читать. На всех сокетах в списке, доступном для записи, есть свободное место. в их буфере и может быть записан. Сокеты вернулись в в исключительных случаях произошла ошибка (фактическое определение «Исключительное состояние» зависит от платформы).

«Читаемые» сокеты представляют три возможных случая. Если розетка это главный сокет «сервера», который используется для прослушивания подключений, то состояние «читабельность» означает, что он готов принять другое входящее соединение. Помимо добавления нового подключения к списку входов для мониторинга, этот раздел устанавливает клиентский сокет не блокировать.

 # Обработка вводов
    для s в читаемом виде:

        если s - сервер:
            # "Читаемый" серверный сокет готов принять соединение
            соединение, client_address = s.принимать()
            print >> sys.stderr, 'новое соединение от', client_address
            connection.setblocking (0)
            inputs.append (соединение)

            # Даем соединению очередь для данных, которые мы хотим отправить
            message_queues [соединение] = Queue.Queue ()
 

Следующий случай - это установленное соединение с клиентом, который отправил данные. Данные читаются с помощью recv (), затем помещаются в очередь, поэтому его можно отправить через сокет и обратно клиенту.

 еще:
            data = s.recv (1024)
            если данные:
                # Читаемый клиентский сокет содержит данные
                print >> sys.stderr, 'получил "% s" от% s'% (data, s.getpeername ())
                message_queues [s] .put (данные)
                # Добавить выходной канал для ответа
                если s не в выходах:
                    outputs.append (s)
 

Читаемый сокет без доступных данных от клиента, у которого отключен, и поток готов к закрытию.

 еще:
                # Интерпретировать пустой результат как закрытое соединение
                печать >> sys.stderr, 'закрытие', client_address, 'после чтения данных нет'
                # Прекратить прослушивание ввода в соединении
                если s в выходах:
                    outputs.remove (s)
                inputs.remove (s)
                s.close ()

                # Удалить очередь сообщений
                del message_queues [s]
 

Имеется меньше случаев для соединений с возможностью записи. Если есть данные в очереди на подключение отправляется следующее сообщение. Иначе, соединение удаляется из списка выходных соединений, так что при следующем прохождении цикла select () не указывает, что сокет готов к отправке данных.

 # Обработка выходов
    для s в доступном для записи:
        пытаться:
            next_msg = message_queues [s] .get_nowait ()
        кроме Queue.Empty:
            # Нет ожидающих сообщений, поэтому прекратите проверку возможности записи.
            print >> sys.stderr, 'очередь вывода для', s.getpeername (), 'пуста'
            outputs.remove (s)
        еще:
            print >> sys.stderr, 'отправка "% s"% s'% (next_msg, s.getpeername ())
            s.send (next_msg)
 

Наконец, если есть ошибка с сокетом, он закрывается.

 # Обработка "исключительных условий"
    для s в исключительных случаях:
        print >> sys.stderr, 'обработка исключительного условия для', s.getpeername ()
        # Прекратить прослушивание ввода в соединении
        inputs.remove (s)
        если s в выходах:
            outputs.remove (s)
        s.close ()

        # Удалить очередь сообщений
        del message_queues [s]
 

В примере клиентской программы используются два сокета, чтобы продемонстрировать, как сервер с select () управляет несколькими подключениями одновременно время.Клиент начинает с подключения каждого сокета TCP / IP к сервер.

 импортная розетка
import sys

messages = ['Это сообщение. ',
             'Оно будет отправлено',
             'по частям.',
             ]
server_address = ('локальный хост', 10000)

# Создать сокет TCP / IP
socks = [socket.socket (socket.AF_INET, socket.SOCK_STREAM),
          socket.socket (socket.AF_INET, socket.SOCK_STREAM),
          ]

# Подключаем сокет к порту, на котором сервер слушает
print >> sys.stderr, 'подключение к% s порт% s'% server_address
для s в носках:
    с.подключиться (адрес_сервера)
 

Затем он отправляет по одному фрагменту сообщения через каждый сокет, и читает все ответы, доступные после записи новых данных.

 для сообщения в сообщениях:

    # Отправлять сообщения на оба сокета
    для s в носках:
        print >> sys.stderr, '% s: отправка "% s"'% (s.getsockname (), message)
        s.send (сообщение)

    # Прочитать ответы на обоих сокетах
    для s в носках:
        данные = s.recv (1024)
        print >> sys.stderr, '% s: получено "% s"'% (s.getsockname (), данные)
        если не данные:
            print >> sys.stderr, 'закрывающий сокет', s.getsockname ()
            s.close ()
 

Запускайте сервер в одном окне, а клиент - в другом. Выход будет выглядеть так, с разными номерами портов.

 $ python ./select_echo_server.py
запуск на локальном порту 10000

в ожидании следующего события
новое соединение от ('127.0.0.1', 55821)

в ожидании следующего события
новое соединение от ('127.0.0.1', 55822)
получил "Это сообщение."из ('127.0.0.1', 55821)

в ожидании следующего события
отправка «Это сообщение» на ('127.0.0.1', 55821)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 55821) пуста

в ожидании следующего события
получил «Это сообщение.» от ('127.0.0.1', 55822)

в ожидании следующего события
отправка «Это сообщение.» на ('127.0.0.1', 55822)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 55822) пуста

в ожидании следующего события
получил "Будет отправлено" от ('127.0,0.1 ', 55821)
получил "Будет отправлено" от ('127.0.0.1', 55822)

в ожидании следующего события
отправка «Оно будет отправлено» на ('127.0.0.1', 55821)
отправка «Будет отправлено» на ('127.0.0.1', 55822)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 55821) пуста
очередь вывода для ('127.0.0.1', 55822) пуста

в ожидании следующего события
получил "по частям". из ('127.0.0.1', 55821)
получил "по частям". из ('127.0.0.1', 55822)

в ожидании следующего события
отправка «по частям». to ('127.0.0,1 ', 55821)
отправка «по частям». к ('127.0.0.1', 55822)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 55821) пуста
очередь вывода для ('127.0.0.1', 55822) пуста

в ожидании следующего события
закрытие ('127.0.0.1', 55822) после чтения нет данных
закрытие ('127.0.0.1', 55822) после чтения нет данных

в ожидании следующего события
 

Выходные данные клиента показывают данные, отправляемые и получаемые с использованием обоих Розетки.

 $ питон ./select_echo_multiclient.py
подключение к порту localhost 10000
('127.0.0.1 ', 55821): отправка «Это сообщение».
('127.0.0.1', 55822): отправка «Это сообщение».
('127.0.0.1', 55821): получено «Это сообщение».
('127.0.0.1', 55822): получено «Это сообщение».
('127.0.0.1', 55821): отправка «Будет отправлено»
('127.0.0.1', 55822): отправка «Будет отправлено»
('127.0.0.1', 55821): получено «Будет отправлено»
('127.0.0.1', 55822): получено «Будет отправлено»
('127.0.0.1', 55821): отправка «по частям».
('127.0.0.1', 55822): отправка «по частям».
('127.0.0.1 ', 55821): получено «по частям».
('127.0.0.1', 55822): получено «по частям».
 

Таймауты

select () также принимает необязательный четвертый параметр, который является количество секунд ожидания перед прерыванием мониторинга, если нет каналы стали активными. Использование значения тайм-аута позволяет основной вызов программы select () как часть большого цикла обработки, выполнение других действий между проверками входа сети.

По истечении тайм-аута select () возвращает три пустых списка.Обновление примера сервера для использования тайм-аута требует добавления дополнительных аргумент для вызова select () и обработка пустых списков после select () возвращается.

 # Подождите, пока хотя бы один из сокетов будет готов к обработке
    print >> sys.stderr, '\ nв ожидании следующего события'
    тайм-аут = 1
    читаемый, доступный для записи, исключительный = select.select (входы, выходы, входы, тайм-аут)

    если нет (читаемый или записываемый или исключительный):
        print >> sys.stderr, 'timed out, do some other work here'
        Продолжать
 

Эта «медленная» версия клиентской программы приостанавливает работу после отправки каждого сообщение, чтобы имитировать задержку или другую задержку при передаче.

 импортная розетка
import sys
время импорта

# Создать сокет TCP / IP
sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

# Подключаем сокет к порту, на котором сервер слушает
server_address = ('локальный хост', 10000)
print >> sys.stderr, 'подключение к% s порт% s'% server_address
sock.connect (адрес_сервера)

время сна (1)

messages = ['Первая часть сообщения.',
             'Часть вторая сообщения.',
             ]
amount_expected = len (''. join (сообщения))

пытаться:

    # Отправить данные
    для сообщения в сообщениях:
        печать >> sys.stderr, 'отправка "% s"'% сообщения
        sock.sendall (сообщение)
        time.sleep (1.5)

    # Ищем ответ
    amount_received = 0
    
    в то время как amount_received > sys.stderr, 'получил "% s"'% данных

наконец-то:
    print >> sys.stderr, 'закрытие сокета'
    sock.close ()
 

Запуск нового сервера с медленным клиентом дает:

 $ python ./select_echo_server_timeout.ру
запуск на локальном порту 10000

в ожидании следующего события
  время вышло

в ожидании следующего события
  время вышло

в ожидании следующего события
новое соединение от ('127.0.0.1', 57776)

в ожидании следующего события
получил «Часть первую сообщения». из ('127.0.0.1', 57776)

в ожидании следующего события
отправка «Часть первая сообщения». к ('127.0.0.1', 57776)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 57776) пуста

в ожидании следующего события
  время вышло

в ожидании следующего события
получил "Вторая часть сообщения"."из ('127.0.0.1', 57776)

в ожидании следующего события
отправка «Вторая часть сообщения». к ('127.0.0.1', 57776)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 57776) пуста

в ожидании следующего события
  время вышло

в ожидании следующего события
закрытие ('127.0.0.1', 57776) после чтения нет данных

в ожидании следующего события
  время вышло

в ожидании следующего события
 

И вывод клиента:

 $ python ./select_echo_slow_client.py
подключение к порту localhost 10000
отправка "Часть первая сообщения."
отправка «Вторая часть сообщения».
получил "Часть первую"
получил "сообщение.Часть вторая"
получил "сообщения".
закрывающая розетка
 

опрос ()

Функция poll () предоставляет аналогичные функции select (), но основная реализация более эффективна. Компромисс что poll () не поддерживается в Windows, поэтому программы, использующие poll () менее переносимы.

Эхо-сервер, построенный на poll (), запускается с того же сокета код конфигурации, используемый в других примерах.

 импорт выбрать
импортный сокет
import sys
очередь импорта

# Создать сокет TCP / IP
server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
server.setblocking (0)

# Привязать сокет к порту
server_address = ('локальный хост', 10000)
print >> sys.stderr, 'запуск на% s порт% s'% server_address
server.bind (адрес_сервера)

# Слушать входящие соединения
server.listen (5)

# Следите за очередями исходящих сообщений
message_queues = {}
 

Значение тайм-аута, переданное в poll (), представлено в миллисекунды, а не секунды, поэтому для полной паузы во-вторых, тайм-аут должен быть установлен на 1000.

 # Не блокировать навсегда (миллисекунды)
ТАЙМ-АУТ = 1000
 

Python реализует poll () с классом, который управляет контролируемые зарегистрированные каналы данных. Каналы добавлены вызов register () с флагами, указывающими, какие события интересно для этого канала. Полный набор флагов:

Событие Описание
ПОЛЛИН Ввод готов
ПОЛЛПРИ Приоритетный ввод готов
ЗАГРЯЗНЕНИЕ Возможность приема вывода
POLLERR Ошибка
ПОЛЛХУП Канал закрыт
POLLNVAL Канал не открыт

Эхо-сервер настроит несколько сокетов только для чтения, и другие, с которых нужно читать или писать.Соответствующие комбинации флаги сохраняются в локальных переменных READ_ONLY и ЧИТАЙ ПИШИ.

 # Часто используемые наборы флагов
READ_ONLY = select.POLLIN | select.POLLPRI | select.POLLHUP | select.POLLERR
READ_WRITE = READ_ONLY | select.POLLOUT
 

Серверный сокет зарегистрирован так, что любой входящий соединения или данные вызывают событие.

 # Настроить опросчик
poller = select.poll ()
poller.register (сервер, READ_ONLY)
 

Так как poll () возвращает список кортежей, содержащих файл дескриптор для сокета и флаг события, отображение из файла номера дескрипторов к объектам необходимы для получения сокет для чтения или записи из него.

 # Сопоставить дескрипторы файлов с объектами сокетов
fd_to_socket = {server.fileno (): сервер,
               }
 

Цикл сервера вызывает poll (), затем обрабатывает «события» возвращается путем поиска сокета и выполнения действий на основе флага в случае.

, пока True:

    # Подождите, пока хотя бы один из сокетов будет готов к обработке
    print >> sys.stderr, '\ nв ожидании следующего события'
    events = poller.poll (TIMEOUT)

    для fd отметьте в событиях:

        # Получить фактический сокет из его файлового дескриптора
        s = fd_to_socket [fd]
 

Как и в случае с select (), когда главный сокет сервера "доступен для чтения", это действительно означает, что есть ожидающее соединение от клиента.В новое соединение регистрируется с флагами READ_ONLY для просмотра чтобы через него поступали новые данные.

 # Обработка входов
        если флаг & (select.POLLIN | select.POLLPRI):

            если s - сервер:
                # "Читаемый" серверный сокет готов принять соединение
                соединение, client_address = s.accept ()
                print >> sys.stderr, 'новое соединение от', client_address
                connection.setblocking (0)
                fd_to_socket [соединение.fileno ()] = соединение
                poller.register (соединение, READ_ONLY)

                # Даем соединению очередь для данных, которые мы хотим отправить
                message_queues [соединение] = Queue.Queue ()
 

Сокеты, кроме сервера, являются существующими клиентами, а recv () используется для доступа к данным, ожидающим чтения.

 еще:
                данные = s.recv (1024)
 

Если recv () возвращает какие-либо данные, они помещаются в исходящую очередь. для сокета и флаги для этого сокета изменяются с помощью modify () поэтому poll () будет следить за тем, чтобы сокет был готов получать данные.

, если данные:
                    # Читаемый клиентский сокет содержит данные
                    print >> sys.stderr, 'получил "% s" от% s'% (data, s.getpeername ())
                    message_queues [s] .put (данные)
                    # Добавить выходной канал для ответа
                    poller.modify (s, READ_WRITE)
 

Пустая строка, возвращаемая recv (), означает, что клиент отключен, поэтому unregister () используется, чтобы сообщить опросу объект игнорировать сокет.

 еще:
                    # Интерпретировать пустой результат как закрытое соединение
                    печать >> sys.stderr, 'закрытие', client_address, 'после чтения данных нет'
                    # Прекратить прослушивание ввода в соединении
                    poller.unregister (s)
                    s.close ()

                    # Удалить очередь сообщений
                    del message_queues [s]
 

Флаг POLLHUP указывает на клиента, который «повесил трубку» соединение, не закрывая его чисто. Сервер прекращает опрос клиенты, которые исчезают.

 elif flag & select.
            # Клиент повесил трубку
            печать >> sys.stderr, 'закрытие', client_address, 'после получения HUP'
            # Прекратить прослушивание ввода в соединении
            poller.unregister (s)
            s.close ()
 

Обработка записываемых сокетов похожа на версию, используемую в пример для select (), за исключением того, что modify () используется для поменять флаги сокета в опросчике вместо его удаления из списка вывода.

 elif flag & select.
            # Socket готов к отправке данных, если они есть.пытаться:
                next_msg = message_queues [s] .get_nowait ()
            кроме Queue.Empty:
                # Нет ожидающих сообщений, поэтому прекратите проверку возможности записи.
                print >> sys.stderr, 'очередь вывода для', s.getpeername (), 'пуста'
                poller.modify (s, READ_ONLY)
            еще:
                print >> sys.stderr, 'отправка "% s"% s'% (next_msg, s.getpeername ())
                s.send (next_msg)
 

И, наконец, любые события с POLLERR приводят к тому, что сервер закройте розетку.

 elif flag & select. ПОЛЬЗОВАТЕЛЬ:
            print >> sys.stderr, 'обработка исключительного условия для', s.getpeername ()
            # Прекратить прослушивание ввода в соединении
            poller.unregister (s)
            s.close ()

            # Удалить очередь сообщений
            del message_queues [s]
 

Когда сервер на основе опроса запускается вместе с select_echo_multiclient.py (клиентская программа, использующая несколько сокетов) вывод:

 $ питон./select_poll_echo_server.py
запуск на локальном порту 10000

в ожидании следующего события

в ожидании следующего события

в ожидании следующего события
новое соединение от ('127.0.0.1', 58447)

в ожидании следующего события
новое соединение от ('127.0.0.1', 58448)
получил «Это сообщение.» от ('127.0.0.1', 58447)

в ожидании следующего события
отправка «Это сообщение» на ('127.0.0.1', 58447)
получил «Это сообщение.» от ('127.0.0.1', 58448)

в ожидании следующего события
очередь вывода для ('127.0.0.1 ', 58447) пусто
отправка «Это сообщение» на ('127.0.0.1', 58448)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 58448) пуста

в ожидании следующего события
получил "Будет отправлено" от ('127.0.0.1', 58447)
получил "Будет отправлено" от ('127.0.0.1', 58448)

в ожидании следующего события
отправка «Будет отправлено» на ('127.0.0.1', 58447)
отправка «Оно будет отправлено» на ('127.0.0.1', 58448)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 58447) пуста
очередь вывода для ('127.0.0.1 ', 58448) пусто

в ожидании следующего события
получил "по частям". из ('127.0.0.1', 58447)
получил "по частям". из ('127.0.0.1', 58448)

в ожидании следующего события
отправка «по частям». к ('127.0.0.1', 58447)
отправка «по частям». к ('127.0.0.1', 58448)

в ожидании следующего события
очередь вывода для ('127.0.0.1', 58447) пуста
очередь вывода для ('127.0.0.1', 58448) пуста

в ожидании следующего события
закрытие ('127.0.0.1', 58448) после чтения нет данных
закрытие ('127.0.0.1', 58448) после чтения нет данных

в ожидании следующего события
 
.
Розетк

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *