Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

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

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

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

Рассмотрим основные моменты и этапы этого процесса.

Безопасность и инструмент

В первую очередь, перед производством работ требуется обеспечить безопасность. При замене или установке розеток, всегда отключайте именно ОБЩИЙ вводной автомат на всю квартиру или дом, а не конкретно на эту розетку.

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

Подготовьте необходимый инструмент:

  • отвертка крестовая
  • мини уровень
  • пассатижи

Также могут понадобиться:

  • гильзы ГМЛ
  • термотрубка
  • пресс клещи

Углубленный подрозетник

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

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

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

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

Вот фото стандартной розетки утопленной в стандартном подрозетнике.

Все пространство, которое остается внутри нее для монтажа проводов – около 1см. Если же вы используете модель глубиной 60мм, то вам добавится целых 1,5см глубины монтажа.

Почувствуйте, что называется разницу.

Длина зачистки изоляции

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

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

Очень удобно это проделывать на круглом кабеле NYM, специальным съемником Jokari.

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

С плоскими кабелями марки ВВГ и ножом электрика с пяткой, такого фокуса проделать не удастся.

А если это еще будет ГОСТовский кабель, а не ТУ-шный, то тем более.

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

Именно поэтому, многим электрикам и нравится марка кабеля NYM, а не ВВГ. Из-за удобства разделки и простоты работы с ним.

Хотя у каждой марки, есть как свои преимущества, так и недостатки.

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

Сколько изоляции нужно снимать с самой жилы, перед тем как ее завести во внутрь контакта? Многое конечно зависит от марки розетки.

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

Но обычно, оголенная часть жилы не должна превышать 8-10мм.

Длина проводов торчащих из подрозетника выбирается исходя из:

  • удобства монтажа
  • глубины подрозетника

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

Как правило, оставляют длину, равную ширине 3-4-х пальцев руки.

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

Основной нюанс, который вызывает жаркие споры у электриков – можно ли подключать розетку шлейфом? И в этом вопросе многие разделились на 3 лагеря:

  • категорически нельзя
  • можно в отдельных случаях
  • можно всегда, если позволяет конструкция розетки

У большинства современных розеток, всегда имеются по две клеммы на каждый провод: фаза-ноль-земля. Итого 6 контактов.

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

Однако есть пункт правил ПУЭ п.1.7.144, который гласит:

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

Для него необходимо делать именно ответвление. Более того, желательно выполнить его безвинтовым способом, чтобы не приходилось в дальнейшем обслуживать (подтягивать). А это значит – гильзование опрессовкой, либо пайка или сварка.

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

Например, у вас кабель питания 3*2,5мм2. Приходящая жила 2,5мм2+ответвление на розетку 2,5мм2+отходящая жила кабеля на соседнюю розетку 2,5мм2.

Итого теоретически – 7,5мм2.

Ввиду того, что фактическое сечение жил не всегда соответствует заявленному, да и прослабление контактов здесь не допустимо, подбирайте гильзу немного меньшего сечения чем расчетное – ГМЛ-6.

Заводите жилку в гильзу и обжимаете пресс клещами.

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

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

Хотя конечно никто не запрещает и наложить несколько слоев качественной изоленты.

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

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

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

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

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

Подобным образом изготовлено большинство двойников-тройников и даже удлинителей.

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

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

Ну и третьи трактователи пункта правил ПУЭ 1.7.144 резонного замечают, что в самом ПУЭ, ничего не сказано о запрете ”шлейфов”. Там даже такого понятия для розеток нет.

Там говорится, что “Pe” проводник должен быть электрически неразрывным (суть именно в этом слове – электрически). И что нельзя включать токопроводящие элементы устройства последовательно в цепь заземляющего проводника.

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

Вот если бы в розетке вход земли был с одной стороны, а выход с другой (из-под другого независимого контакта), тогда да – нельзя! Более того, ПУЭ не рассматривает контакты розетки как открытые проводящие части, поэтому п.1.7.144 здесь даже не причем.

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

Какое из этих мнений верно и как монтировать вам?

Если вы делаете, что называется для себя и “на века”, чтобы не заглядывать в подрозетник десятки лет, то ставьте гильзу и выполняйте ответвление, а не шлейф.

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

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

В конце концов, это ваш собственный дом, и никто не вправе вам запрещать поступать так, а не иначе.

Расположение суппорта

Следующий вопрос, как правильно расположить суппорт розетки внутри подрозетника – клеммами вниз или вверх.

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

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

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

Фаза слева или справа

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

Куда именно в розетке подключать провода? Если с землей все понятно, для нее место посередине, то вот куда заводить ноль и фазу?

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

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

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

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

  • желто-зеленый провод – земля
  • синий или бело-синий – ноль
  • разноцветный или белый – фаза

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

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

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

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

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

Все что остается, это установить лицевую панель и накладную рамку.

У некоторых марок, например Legrand, накладные рамки бывают взаимозаменяемыми.

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

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

А это значит, что вы не сможете как угодно вставить ее в декоративную рамку.

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

Только после этого, все закрепляется без проблем.



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

Розетки подрозетники в категории “Материалы для ремонта”

Подрозетник для выключателя розетки Aqara Wall Switch and Smart Socket 82.5×45 mm A386D/45

Доставка по Украине

199 грн

Купить

Коронка по бетону, камню, кирпичу 68 мм для розеток (подрозетников) ZhiWei

Доставка по Украине

209 грн

Купить

Подрозетник, кронштейн розетки фаркопа сменный с хомутом (под ГБО)

Доставка из г. Житомир

300 грн

Купить

Житомир

Подрозетник для гипсокартона двойной квадратный Coswall

На складе в г. Житомир

Доставка по Украине

120 грн

150 грн

Купить

Житомир

Квадратный подрозетник Coswall внутреннего монтажа 86х86

На складе в г. Житомир

Доставка по Украине

45 грн

55 грн

Купить

Житомир

Коробка монтажная для гипсокартона квадратная Coswall азиатский стандарт

На складе в г. Житомир

Доставка по Украине

70 грн

80 грн

Купить

Житомир

Коробка монтажная квадратная наружная подрозетник одинарный 86х86 Coswall

На складе

Доставка по Украине

45 грн

55 грн

Купить

Коробка монтажная квадратная наружная глубокая подрозетник одинарный 86х86 Coswall

На складе в г. Житомир

Доставка по Украине

48 грн

65 грн

Купить

Житомир

Розетка универсальная двойная с USB Xiaomi OPPLE K12 (K128502-h3) Grey

На складе в г. Днепр

Доставка по Украине

535 — 575 грн

от 2 продавцов

535 грн

650 грн

Купить

Розетка универсальная двойная Xiaomi OPPLE K12 (K121094-h3) Grey

На складе в г. Днепр

Доставка по Украине

199 — 219 грн

от 2 продавцов

199 грн

299 грн

Купить

Розетка универсальная двойная Xiaomi OPPLE K12 (K121094) White

На складе в г. Днепр

Доставка по Украине

199 — 219 грн

от 2 продавцов

199 грн

299 грн

Купить

Розетка универсальная тройная Xiaomi OPPLE K12 (K121097) White

На складе в г. Днепр

Доставка по Украине

249 — 275 грн

от 2 продавцов

249 грн

399 грн

Купить

Розетка универсальная тройная Xiaomi OPPLE K12 (K121097-h3) Grey

На складе в г. Днепр

Доставка по Украине

249 — 275 грн

от 2 продавцов

249 грн

399 грн

Купить

Розетка 2-я ViKO Carmen

На складе

Доставка по Украине

99 грн

Купить

Розетка 2-я с заземлением ViKO Carmen

На складе

Доставка по Украине

110 грн

Купить

Смотрите также

Коробка монтажная квадратная наружная подрозетник двойной 86х86 Coswall

На складе

Доставка по Украине

99 грн

130 грн

Купить

Коробка монтажная квадратная наружная подрозетник тройной 86х86 Coswall

На складе

Доставка по Украине

139 грн

170 грн

Купить

Монтажная коробка квадратная 68х68х45 для китайских розеток

На складе в г. Харьков

Доставка по Украине

20 грн

Купить

Харьков

Розетка телефонная SIEMENS IRIS RJ11 белоснежная

Доставка из г. Киев

410 грн

Купить

Розетка телефонная SIEMENS IRIS RJ11 слоновая кость

Доставка из г. Киев

410 грн

Купить

Розетка телефонная SIEMENS IRIS RJ11 алюминий Меркурий

Доставка из г. Киев

489 грн

Купить

Розетка телефонная SIEMENS IRIS RJ11 сталь Нептун

Доставка из г. Киев

489 грн

Купить

Подрозетник американского стандарта широкий Coswall коробка монтажная

На складе в г. Житомир

Доставка по Украине

89 грн

130 грн

Купить

Житомир

Подрозетник американского стандарта Coswall коробка монтажная

На складе

Доставка по Украине

89 грн

130 грн

Купить

Выключатель 1-клавишный накладной LXL TERRA Белый

На складе в г. Полтава

Доставка по Украине

38 грн

Купить

Полтава

Выключатель одноклавишный белый врезной Mono Electric DESPINA 220в 16А

На складе в г. Полтава

Доставка по Украине

68 грн

Купить

Полтава

Выключатель двухклавишный врезной Panasonic Arkedia Slim Белый 220в 16А

На складе в г. Полтава

Доставка по Украине

71 грн

Купить

Полтава

Выключатель трехклавишный встраиваемый Panasonic Arkedia Slim Белый 220в 16А

На складе в г. Полтава

Доставка по Украине

134 грн

Купить

Полтава

Выключатель 2-клавишный скрытый Mono Electric DESPINA Кремовый 220в 16А

На складе в г. Полтава

Доставка по Украине

82 грн

Купить

Полтава

socketserver — Платформа для сетевых серверов — Документация по Python 3.

11.2

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


Модуль socketserver упрощает задачу написания сетевых серверов.

Наличие: не Emscripten, не WASI.

Этот модуль не работает или недоступен на платформах WebAssembly wasm32-emscripten и wasm32-wasi . Видеть Платформы WebAssembly для получения дополнительной информации.

Существует четыре основных класса конкретных серверов:

class socketserver.TCPServer ( server_address , RequestHandlerClass , bind_and_activate = True )

Используется интернет-протокол TCP, обеспечивающий непрерывные потоки данных между клиентом и сервером. Если bind_and_activate истинно, конструктор автоматически пытается вызвать server_bind() и сервер_активировать() . Остальные параметры передаются базовый класс BaseServer .

class socketserver. UDPServer ( server_address , RequestHandlerClass , bind_and_activate = True )

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

class socketserver.UnixStreamServer ( server_address , RequestHandlerClass , bind_and_activate = True )
class socketserver.UnixDatagramServer ( server_address , RequestHandlerClass , bind_and_activate = True )

Эти более редко используемые классы аналогичны TCP и классы UDP, но используют сокеты домена Unix; они недоступны на платформы, отличные от Unix. Параметры те же, что и для TCP-сервер .

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

Для создания сервера требуется несколько шагов. Во-первых, вы должны создать запрос класс обработчика путем создания подкласса класса BaseRequestHandler и переопределение его метода handle() ; этот метод будет обрабатывать входящие Запросы. Во-вторых, вы должны создать экземпляр одного из серверных классов, передав его адрес сервера и класс обработчика запроса. Рекомендуется использовать сервер в с заявление. Затем позвоните в handle_request() или serve_forever() метод объекта сервера для обрабатывать один или несколько запросов. Наконец, вызовите server_close() чтобы закрыть сокет (если вы не использовали оператор с оператором ).

При наследовании от ThreadingMixIn для поведения резьбового соединения, вы должны явно объявить, как вы хотите, чтобы ваши потоки вели себя при резком неисправность. Класс ThreadingMixIn определяет атрибут daemon_threads , что указывает, должен ли сервер ждать прекращение потока. Вы должны явно установить флаг, если хотите потоки ведут себя автономно; по умолчанию False , что означает, что Python не завершится, пока все потоки, созданные ThreadingMixIn , не будут вышел.

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

Примечания по созданию сервера

На диаграмме наследования есть пять классов, четыре из которых представляют синхронных серверов четырех типов:

 +------------+
| Базовый сервер |
+------------+
      |
      в
+-----------+ +----+
| TCP-сервер |------->| UnixStreamServer |
+-----------+ +----+
      |
      в
+-----------+ +--------------------+
| UDP-сервер |------->| UnixDatagramServer |
+-----------+ +--------------------+
 

Обратите внимание, что UnixDatagramServer происходит от UDPServer , а не от UnixStreamServer — единственная разница между IP и Unix server — это семейство адресов.

class socketserver.ForkingMixIn
class socketserver.ThreadingMixIn

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

 класс ThreadingUDPServer(ThreadingMixIn, UDPServer):
    проходить
 

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

ForkingMixIn и упомянутые ниже классы Forking доступно только на платформах POSIX, поддерживающих fork() .

socketserver.ForkingMixIn.server_close() ждет, пока все дочерние процессы завершены, за исключением случаев, когда атрибут socketserver.ForkingMixIn.block_on_close имеет значение false.

сокетсервер. ThreadingMixIn.server_close() ждет, пока все не демоны потоки завершены, за исключением случаев, когда Атрибут socketserver.ThreadingMixIn.block_on_close имеет значение false. Использовать демонические потоки, установив ThreadingMixIn.daemon_threads От до True , чтобы не ждать, пока потоки полный.

Изменено в версии 3.7: socketserver.ForkingMixIn.server_close() и socketserver.ThreadingMixIn.server_close() теперь ждет, пока все дочерние процессы и недемонические потоки завершены. Добавить новый socketserver.ForkingMixIn.block_on_close класс атрибут для подписки на поведение до версии 3.7.

class socketserver.ForkingTCPServer
class socketserver.ForkingUDPServer
class socketserver.ThreadingTCPServer
class socketserver.ThreadingUDPServer

Эти классы предварительно определены с помощью смешанных классов.

Чтобы реализовать службу, вы должны получить класс из BaseRequestHandler и переопределить его метод handle() . Затем вы можете запускать различные версии сервис, объединив один из классов сервера с вашим обработчиком запросов сорт. Класс обработчика запроса должен отличаться для дейтаграммы или потока. услуги. Это можно скрыть с помощью подклассов обработчиков StreamRequestHandler или DatagramRequestHandler .

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

С другой стороны, если вы создаете HTTP-сервер, на котором хранятся все данные внешне (например, в файловой системе) синхронный класс будет по существу сделать сервис «глухим», пока обрабатывается один запрос — что может быть в течение очень долгого времени, если клиент медленно получает все данные, которые он просил. Здесь подходит многопоточный или разветвленный сервер.

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

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

Объекты сервера

class socketserver.BaseServer ( server_address , RequestHandlerClass )

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

файлно()

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

handle_request()

Обработка одного запроса. Эта функция вызывает следующие методы в порядок: get_request() , verify_request() и процесс_запрос() . Если предоставленный пользователем handle() метод класс обработчика вызывает исключение, метод сервера handle_error() будет называться. Если запрос не получен в течение тайм-аут секунд, будет вызвано handle_timeout() и handle_request() вернется.

serve_forever ( poll_interval = 0,5 )

Обрабатывать запросы до явного запроса shutdown() . Опрос для выключение каждые poll_interval секунды. Игнорирует атрибут тайм-аута . Это также вызывает service_actions() , который может использоваться подклассом или миксином для предоставления действий, специфичных для данной службы. Например, Класс ForkingMixIn использует service_actions() для очистки зомби дочерние процессы.

Изменено в версии 3.3: Добавлен вызов service_actions в метод serve_forever .

service_actions()

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

Новое в версии 3.3.

выключение()

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

server_close()

Очистить сервер. Может быть переопределен.

address_family

Семейство протоколов, к которым принадлежит сокет сервера. Распространенными примерами являются socket.AF_INET и socket.AF_UNIX .

Рекестхандлеркласс

Пользовательский класс обработчика запросов; создается экземпляр этого класса для каждого запроса.

адрес_сервера

Адрес, который прослушивает сервер. Формат адресов меняется в зависимости от семейства протоколов; см. документацию для модуля socket для деталей. Для интернет-протоколов это кортеж, содержащий строку, дающую адрес и целочисленный номер порта: например, ('127.0.0.1', 80) .

розетка

Объект сокета, на котором сервер будет прослушивать входящие запросы.

Классы сервера поддерживают следующие переменные класса:

allow_reuse_address

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

request_queue_size

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

сокет_тип

Тип сокета, используемого сервером; сокет.SOCK_STREAM и socket.SOCK_DGRAM — это два общих значения.

тайм-аут

Длительность тайм-аута, измеряется в секундах или Нет , если тайм-аут не установлен. желанный. Если handle_request() не получает входящих запросов в течение тайм-аут, вызывается метод handle_timeout() .

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

Finish_request( запрос , client_address )

Фактически обрабатывает запрос, создавая экземпляр RequestHandlerClass и вызывая его метод handle() .

получить_запрос()

Должен принять запрос от сокета и вернуть 2-кортеж, содержащий новый объект сокета, который будет использоваться для связи с клиентом, и клиентский адрес.

handle_error ( запрос , client_address )

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

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

handle_timeout()

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

process_request( запрос , client_address )

Вызывает finish_request() для создания экземпляра Класс Обработчиков Запросов . При желании эта функция может создать новый процесс или поток для обработки запроса; ForkingMixIn и Классы ThreadingMixIn делают это.

server_activate()

Вызывается конструктором сервера для активации сервера. Поведение по умолчанию для TCP-сервера просто вызывает listen() на сокете сервера. Может быть переопределен.

server_bind()

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

verify_request ( запрос , client_address )

Должен возвращать логическое значение; если значение равно True , запрос будет быть обработан, и если это False , запрос будет отклонен. Этот Функция может быть переопределена для реализации контроля доступа к серверу. реализация по умолчанию всегда возвращает True .

Изменено в версии 3. 6: Добавлена ​​поддержка протокола менеджера контекста. Выход из диспетчер контекста эквивалентен вызову server_close() .

Объекты обработчика запросов

класс сокетсервер.BaseRequestHandler

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

настройка()

Вызывается перед методом handle() для выполнения любых действий по инициализации необходимый. Реализация по умолчанию ничего не делает.

ручка()

Эта функция должна выполнять всю работу, необходимую для обслуживания запроса. реализация по умолчанию ничего не делает. Несколько атрибутов экземпляра доступным для него; запрос доступен как self. request ; клиент адрес как self.client_address ; и экземпляр сервера как self.server , если ему требуется доступ к информации о сервере.

Тип self.request отличается для дейтаграммы или потока услуги. Для потоковых служб self.request — это объект сокета; для сервисы дейтаграмм, self.request — это пара строки и сокета.

закончить()

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

класс сокетсервер.StreamRequestHandler
класс socketserver.DatagramRequestHandler

Эти подклассы BaseRequestHandler переопределяют установка() и завершение() методов и предоставить атрибуты self. rfile и self.wfile . self.rfile и атрибуты self.wfile могут быть чтение или запись, соответственно, для получения данных запроса или возврата данных клиенту. Атрибуты rfile поддерживают читаемый интерфейс io.BufferedIOBase , и атрибуты wfile поддерживают интерфейс io.BufferedIOBase с возможностью записи.

Изменено в версии 3.6: StreamRequestHandler.wfile также поддерживает io.BufferedIOBase интерфейс с возможностью записи.

Примеры

socketserver.TCPServer Пример

Это серверная часть:

 импорт сокетсервера
класс MyTCPHandler (socketserver.BaseRequestHandler):
    """
    Класс обработчика запросов для нашего сервера.
    Он создается один раз при подключении к серверу и должен
    переопределить метод handle() для реализации связи с
    клиент.
    """
    Деф дескриптор (сам):
        # self. request - это сокет TCP, подключенный к клиенту
        self.data = self.request.recv(1024).strip()
        print("{} написал:".format(self.client_address[0]))
        печать (самостоятельные данные)
        # просто отправьте обратно те же данные, но в верхнем регистре
        self.request.sendall(self.data.upper())
если __name__ == "__main__":
    ХОСТ, ПОРТ = "localhost", 9999
    # Создаем сервер, привязываемся к localhost по порту 9999
    с socketserver.TCPServer((HOST, PORT), MyTCPHandler) в качестве сервера:
        # Активировать сервер; это будет продолжаться до тех пор, пока вы
        # прерываем программу с помощью Ctrl-C
        сервер.serve_forever()
 

Альтернативный класс обработчика запросов, использующий потоки (файлоподобные объекты, которые упрощают связь, предоставляя стандартный файловый интерфейс):

 класс MyTCPHandler (socketserver.StreamRequestHandler):
    Деф дескриптор (сам):
        # self.rfile — файлоподобный объект, созданный обработчиком;
        # теперь мы можем использовать, например, readline() вместо необработанных вызовов recv()
        self. data = self.rfile.readline().strip()
        print("{} написал:".format(self.client_address[0]))
        печать (самостоятельные данные)
        # Аналогично, self.wfile — это файлоподобный объект, используемый для обратной записи
        # к клиенту
        self.wfile.write(self.data.upper())
 

Разница в том, что вызов readline() во втором обработчике вызовет recv() несколько раз, пока не встретит символ новой строки, в то время как одиночный вызов recv() в первом обработчике просто вернет то, что было отправлено от клиента за один вызов sendall() .

Это клиентская сторона:

 импортная розетка
импорт системы
ХОСТ, ПОРТ = "localhost", 9999
данные = " ".join(sys.argv[1:])
# Создаем сокет (SOCK_STREAM означает сокет TCP)
с socket.socket(socket.AF_INET, socket.SOCK_STREAM) в качестве носка:
    # Подключиться к серверу и отправить данные
    sock.connect((ХОСТ, ПОРТ))
    sock.sendall (байты (данные + "\n", "utf-8"))
    # Получение данных с сервера и завершение работы
    получено = ул(sock. recv(1024), "utf-8")
print("Отправлено: {}".формат(данные))
print("Получено: {}".format(получено))
 

Вывод примера должен выглядеть примерно так:

Сервер:

 $ Python TCPServer.py
127.0.0.1 пишет:
b'привет мир с TCP'
127.0.0.1 пишет:
b'питон хорош'
 

Клиент:

 $ python TCPClient.py привет, мир с TCP
Отправлено: привет мир с TCP
Получено: ПРИВЕТ МИР С TCP
$ python TCPClient.py python хорош
Отправлено: питон хорош
Получено: ПИТОН ХОРОШИЙ
 

socketserver.UDPServer Пример

Это серверная часть:

 импорт сокетсервера
класс MyUDPHandler (socketserver.BaseRequestHandler):
    """
    Этот класс работает аналогично классу обработчика TCP, за исключением того, что
    self.request состоит из пары данных и клиентского сокета, и поскольку
    нет подключения адрес клиента должен быть указан явно
    при отправке данных обратно через sendto().
    """
    Деф дескриптор (сам):
        данные = self.request[0]. strip()
        сокет = self.request[1]
        print("{} написал:".format(self.client_address[0]))
        печать (данные)
        socket.sendto(data.upper(), self.client_address)
если __name__ == "__main__":
    ХОСТ, ПОРТ = "localhost", 9999
    с socketserver.UDPServer((HOST, PORT), MyUDPHandler) в качестве сервера:
        сервер.serve_forever()
 

Это клиентская сторона:

 импортная розетка
импорт системы
ХОСТ, ПОРТ = "localhost", 9999
данные = " ".join(sys.argv[1:])
# SOCK_DGRAM — это тип сокета, используемый для сокетов UDP.
носок = сокет.сокет (сокет.AF_INET, сокет.SOCK_DGRAM)
# Как видите, здесь нет вызова connect(); UDP не имеет соединений.
# Вместо этого данные отправляются получателю напрямую через sendto().
sock.sendto(байты(данные + "\n", "utf-8"), (ХОСТ, ПОРТ))
получено = ул(sock.recv(1024), "utf-8")
print("Отправлено: {}".формат(данные))
print("Получено: {}".format(получено))
 

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

Асинхронные миксины

Для создания асинхронных обработчиков используйте ThreadingMixIn и ForkingMixIn классов.

Пример для класса ThreadingMixIn :

 импортная розетка
импорт потоков
импортировать сервер сокетов
класс ThreadedTCPRequestHandler (socketserver.BaseRequestHandler):
    Деф дескриптор (сам):
        данные = ул (self.request.recv (1024), 'ascii')
        cur_thread = threading.current_thread()
        ответ = байты ("{}: {}". формат (cur_thread.name, данные), 'ascii')
        self.request.sendall(ответ)
класс ThreadedTCPServer (socketserver.ThreadingMixIn, socketserver.TCPServer):
    проходить
def client(ip, порт, сообщение):
    с socket.socket(socket.AF_INET, socket.SOCK_STREAM) в качестве носка:
        sock.connect((ip, порт))
        sock.sendall (байты (сообщение, 'ascii'))
        ответ = ул(sock.recv(1024), 'ascii')
        print("Получено: {}".format(ответ))
если __name__ == "__main__":
    # Порт 0 означает выбор произвольного неиспользуемого порта
    ХОСТ, ПОРТ = "localhost", 0
    сервер = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
    с сервером:
        ip, порт = server. server_address
        # Запускаем поток с сервером -- тогда этот поток запустит один
        # больше потока для каждого запроса
        server_thread = threading.Thread (цель = server.serve_forever)
        # Выход из потока сервера, когда основной поток завершится
        server_thread.daemon = Истина
        server_thread.start()
        print("Серверный цикл выполняется в потоке:", server_thread.name)
        клиент(ip, порт, "Hello World 1")
        клиент(ip, порт, "Hello World 2")
        клиент(ip, порт, "Hello World 3")
        сервер.shutdown()
 

Вывод примера должен выглядеть примерно так:

 $ Python ThreadedTCPServer.py
Цикл сервера, работающий в потоке: Thread-1
Получено: Thread-2: Hello World 1
Получено: Тема-3: Привет, мир 2
Получено: Тема-4: Привет, мир 3
 

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

Программирование

сокетов на Python0001

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

Они являются реальной основой просмотра веб-страниц. Проще говоря, есть сервер и клиент.
Программирование сокетов начинается с импорта библиотеки сокетов и создания простого сокета.

 импортная розетка
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

Здесь мы создали экземпляр сокета и передали ему два параметра. Первый параметр — AF_INET , а второй — SOCK_STREAM . AF_INET относится к семейству адресов ipv4. SOCK_STREAM означает протокол TCP, ориентированный на соединение.
Теперь мы можем подключиться к серверу через этот сокет.

Подключение к серверу:  

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

 $ ping www.google.com 

Вы также можете найти IP-адрес с помощью Python: 

 import socket
ip = socket.gethostbyname('www.google.com')
print ip 

Вот пример скрипта для подключения к Google.

Python3

import socket

import sys

 

try :

     s = сокет

ПЕЧАТЬ ( ». Не удалось создание сокета с ошибкой % S" % (ERR))

Port = 80

0005

TRY :

HOST_IP = .

Печать ( "Была ошибка, разрешающая хост" )

Sys.)0009

S.Connect ((host_ip, порт))

Печать ( "

 Сокет успешно создан
произошла ошибка при разрешении хоста 

Здесь, когда мы будем успешно подключены, вывод будет:

 Сокет успешно создан
сокет успешно подключился к google 
  • Первым делом сделали розетку.
  • Затем мы определили IP-адрес Google и, наконец, подключились к Google.
  • Теперь нам нужно знать, как мы можем отправить некоторые данные через сокет.
  • Для отправки данных библиотека сокетов имеет функцию sendall . Эта функция позволяет отправлять данные на сервер, к которому подключен сокет, и сервер также может отправлять данные клиенту с помощью этой функции.

Простая серверно-клиентская программа:  

Сервер:  

У сервера есть метод bind(), который привязывает его к определенному IP-адресу и порту, чтобы он мог прослушивать входящие запросы на этот IP-адрес и порт. У сервера есть метод listen(), который переводит сервер в режим прослушивания. Это позволяет серверу прослушивать входящие соединения. И, наконец, у сервера есть методы accept() и close(). Метод accept инициирует соединение с клиентом, а метод close закрывает соединение с клиентом.

Python3

Импорт сокет

= сокетов.

Порт = 12345

S.Bind (('', Port))

Печать ( "сокета, приготовленная на % s" % (порт))

S. Listen ( 5 )

( "

. Прослушивание " )

, в то время как True :

C, Addr = S.Cect ()

8 = .0009 Печать ( 'Получил подключение от' , addr)

C.Send ( 'Спасибо за Connecting' . Encode () .

 

  

   c.close()

    

  

   break

  • Первым делом импортируем необходимый сокет.
  • Затем мы создали объект сокета и зарезервировали порт на нашем компьютере.
  • После этого мы привязали наш сервер к указанному порту. Передача пустой строки означает, что сервер также может прослушивать входящие соединения с других компьютеров. Если бы мы прошли 127.0.0.1, то он прослушивал бы только те звонки, которые были сделаны внутри локального компьютера.
  • После этого мы переводим сервер в режим прослушивания. 5 здесь означает, что 5 соединений находятся в ожидании, если сервер занят, и если 6-й сокет пытается подключиться, то в соединении отказывается.
  • Наконец, мы делаем цикл while и начинаем принимать все входящие соединения и закрывать эти соединения после благодарственного сообщения всем подключенным сокетам.

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

 # запустите сервер
$ сервер python. py
# держать вышеуказанный терминал открытым
# теперь откройте другой терминал и введите:
 
$ телнет локальный хост 12345 9]'.
Спасибо за подключениеСоединение закрыто внешним хостом. 

Этот вывод показывает, что наш сервер работает.
Now for the client-side: 

Python3

import socket            

 

s = socket.socket()        

 

port = 12345                

 

s.connect(( '127.0.0.1' , порт))

Печать (S.Recv ( 1024 ) .Decode ()

S. Close () 999999999898181818188181818181818181818181818818181818181818181818181818181818181818181818198181818181818181818181818 1818181818181818181818181818189       

  • Прежде всего, мы создаем объект-сокет.
  • Затем мы подключаемся к локальному хосту через порт 12345 (порт, на котором работает наш сервер) и, наконец, мы получаем данные с сервера и закрываем соединение.
  • Теперь сохраните этот файл как client.py и запустите его из терминала после запуска сценария сервера.
 # запускаем сервер:
$ сервер python.py
Сокет успешно создан
сокет привязан к 12345
сокет слушает
Получил соединение от ('127.0.0.1', 52617) 
 # запускаем клиент:
$ Python client.py
Спасибо за подключение. Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя submit.geeksforgeeks.org, или отправить свою статью по адресу [email protected]. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *