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
Здесь, когда мы будем успешно подключены, вывод будет: Сервер: У сервера есть метод bind(), который привязывает его к определенному IP-адресу и порту, чтобы он мог прослушивать входящие запросы на этот IP-адрес и порт. У сервера есть метод listen(), который переводит сервер в режим прослушивания. Это позволяет серверу прослушивать входящие соединения. И, наконец, у сервера есть методы accept() и close(). Метод accept инициирует соединение с клиентом, а метод close закрывает соединение с клиентом. 8 Клиент : Этот вывод показывает, что наш сервер работает. |