Как поменять розетку в квартире под напряжением


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

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

Когда нужно менять розетки

Необходимость заменить старую розетку на новую возникает, когда:

  1. В помещении есть устройства старого образца, которые имеют непривлекательный внешний вид. К ним нельзя подключить электроприборы с европейским штекером (евровилка).
  2. Нужна двойная розетка. Большинство людей в быту применяют тройники или переноски. Это удобно, но небезопасно. Если нужно подключать несколько приборов, лучше установить двойные розетки.
  3. Расшатался подрозетник или на отверстиях появились следы подгорания. Если не предпринять меры, может произойти возгорание.
  4. Ремонт. Специалисты советуют устанавливать розетки на высоте 40 см от пола. Раньше стандарты были другими, и устройства монтировались на высоте примерно 1 м.

Еще одним поводом сменить розетки является новая дизайнерская задумка относительно оформления интерьера.

к содержанию ↑

Необходимые материалы

До начала работы необходимо подготовить следующие материалы и инструменты:

  1. Новая розетка. Бывает разных видов: одинарная, двойная, накладная, внутренняя. Розетки отличаются допустимым количеством ампер. Для энергоемкой бытовой техники рекомендуется устанавливать устройства помощнее.
  2. Подрозетник, или монтажная коробка. Иногда старый подрозетник закреплен в стене плотно и не расшатывается, но оставлять его небезопасно.
  3. Стартовая шпаклевка или алебастр и шпатель. Не потребуются только для монтажа розетки в гипсокартон, но при работе с бетонными или кирпичными стенами смесь и шпатель незаменимы.
  4. Отвертка. Понадобятся индикаторная и крестообразная. С помощью индикаторной проверяются провода на наличие в них электрического тока, а также закручиваются небольшие шурупы.
  5. Пассатижи. Используются на многих этапах работы.
  6. Кусачки. Нужны, чтобы откусывать провода и снимать с них изоляцию.

к содержанию ↑

Демонтаж старой розетки

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

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

Внутренняя

Снять внутреннюю розетку своими руками несложно:

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

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

к содержанию ↑

Накладная

Если розетка накладная, процесс демонтажа будет выглядеть так:

  1. Отключить напряжение.
  2. Проверить отсутствие тока отверткой с индикатором.
  3. Отсоединить болты, снять крышку.
  4. Отключить провод питания и заземления.
  5. Снять основание, выкрутив закрепляющие его саморезы.
  6. Осторожно убрать деревянную часть.

После всех вышеперечисленных действий из стены будут торчать провода.

Установка монтажного короба

Специалисты рекомендуют устанавливать подрозетники нового образца. Они обычно изготовлены из пластика. Бывают двух видов:

  1. Для установки в гипсокартон — имеют два ушка.
  2. Для монтажа в бетонные и кирпичные стены.

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

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

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

  1. Подготовить раствор. Смесь нужно медленно всыпать в воду, постоянно помешивая. По консистенции она должна напоминать густую сметану.
  2. Смочить стену водой и нанести тонкий слой гипса/алебастра. Сделать так для внутренней части отверстия и наружной.

Действовать нужно быстро. Раствор застывает в считанные минуты.

Важно! Новый пластиковый подрозетник не должен выходить за пределы стены. Вмонтированная в него розетка небезопасна и портит внешний вид помещения.

к содержанию ↑

Подключение

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

Помните о маркировке проводов:

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

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

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

к содержанию ↑

Установка лицевой панели

Этот этап является заключительным в установке розетки. Она закрепляется с помощью болта. Закручивать следует аккуратно, стараясь не переусердствовать. В противном случае вы рискуете повредить («растянуть») отверстие или панель.

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

Когда панель установлена, следует включить электричество.

к содержанию ↑

Установка двойного устройства

Монтаж двойной розетки бывает двух видов:

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

Очень важно правильно расположить заземление.

к содержанию ↑

Работа с гипсокартоном

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

Устанавливаем так:

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

Обратите внимание! Гипсокартон — хрупкий материал, и работать следует максимально осторожно.

к содержанию ↑

Правила работы

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

  1. Главное правило — сразу отключить электричество.
  2. Инструменты, используемые при работе, должны иметь изолированные ручки.
  3. Нельзя допускать контакт оголенных проводов с телом.
  4. Провода необходимо проверять индикаторной отверткой или мультиметром.
  5. Если произошел удар током, нужно оперативно оказать пострадавшему первую помощь.

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

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

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

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Как изменить свою жизнь: 8 советов

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

Уважаемый читатель, добро пожаловать на наш полезный сайт Мотивационные советы!

Желание изменить свою жизнь - не редкость, и, однажды почувствовав, им нельзя пренебрегать!

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

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

И не откладывайте решение до лета и тем более до осени.

Лето настраивает на физически активный отдых и отвлекает от созидательных дел. Кроме того, будет ли вас поощрять дополнительная нагрузка, стресс и «бонус» в виде депрессии?

Надеяться на падение абсолютно бессмысленно.

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

Итак, ваш вопрос может быть таким: «Как изменить мою жизнь?» и "Когда его менять?"

Весна остается единственной отправной точкой для ваших начинаний.

8 советов, как изменить свою жизнь?


Изменить жизнь проще, чем кажется.

Ставьте цель и идите к ней, конечно, без позиции «собака-ест-собака».

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

  1. Не бойтесь прощаться со своим прошлым.

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

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

    Избавьтесь от сомнений, что «все может быть хуже».

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

    Скорее всего, эти пути не приведут вас к вашим позитивным устремлениям.

  2. Прежде всего, определите вашу настоящую неудовлетворенность.

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

    Как и куда эти пути направили вашу жизнь?

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

  3. Напишите список «Что нужно сделать» и как можно точнее сформулируйте свои цели.


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

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

  4. Разработайте план действий, приступайте к его реализации и не забывайте о самовнушении: «Я сделаю это, я справлюсь, я могу!».

    Не думайте негативно и не теряйте веру, и вместе с этим не забывайте о своем партнере.

    Найдите хотя бы 15 минут для него или для нее утром, перед поездкой на работу, за обеденным столом или перед сном.

    Это поддержит ваши отношения на плаву и окажет вам поддержку в решении ваших проблем.

  5. Не начинайте утро с жалоб на текущую ситуацию или проблемы на работе.

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

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

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

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

    Поднимет настроение и наполнит оптимизмом.

  7. Избавьтесь от стресса и возьмите тайм-аут.

    Даже самым стойким телам нужна передышка и время на восстановление.

  8. Прекратите пить галлоны кофе и продолжайте курить.


    Может быть, повторяюсь, но нужно избегать пессимизма и отчаяния!

    Не забывайте, что отчаянный оптимизм - тоже диагноз!

Только ты можешь ИЗМЕНИТЬ свою жизнь, никто не может сделать это за тебя…

П.С.:

А вот и история.

Человек взял свой крест и обратился к Богу: «Я так устал от него, пожалуйста, забери его…» Бог ответил: «Заходи, выбери один из крестов, которые у меня есть».

Наконец, этот человек сделал свой выбор, и Бог сказал ему: «Это все еще твой крест, и ты сам принес его сюда».

Итак…

У каждого из нас свой крест,

Не нужно отрицать.

И хорошо это или плохо,

Не жалуйтесь «Я? Но почему?"

Желаю всем ярких и позитивных моментов жизни!

Меняйтесь и улучшайте себя!

Полезная статья? Не пропустите новинки!
Введите e-mail и получайте новые статьи на почту

.

Как запросить помощника по проживанию в жилищном фонде HUD - Как попасть на

Art: Robin Mead

Руководство по подаче заявки на проживание помощника в HUD, Раздел 8, жилищные ваучеры и другие программы субсидированного жилья.

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

💕 Вам и вашему врачу необходимо будет убедиться, что вам нужен помощник.

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

💕 Вы сами выбираете себе помощника. Это может быть кто-то, кого вы уже знаете, или кто-то новый, которого вы наняли.


Кто может запросить помощника по проживанию

Live in aide может быть запрошен для любого взрослого или любого ребенка в вашей семье. Лицо, нуждающееся в помощнике, должно быть:

💕 Для инвалидов или

💕 Пожилые (62+) или

💕 Для пожилых людей (50+)

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


Смогу ли я получить помощника?

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

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


Кто может быть моим помощником?

Вам нужно будет самостоятельно организовать поиск помощника.Вашим помощником может быть друг, сосед или человек, которого вы наняли. В некоторых случаях вашим помощником может быть родственник. Ваш помощник может быть как оплачиваемым, так и неоплачиваемым. В HUD есть некоторые правила и ограничения на то, кого вы можете выбрать в качестве помощника: Кто может быть моим помощником в жизни?


Как мне обратиться за помощью?

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

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


Будет ли платить моему помощнику?

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


Получит ли мой помощник спальню? Придется ли мне переехать?

В большинстве случаев вам будет предоставлена ​​дополнительная спальня для помощника. Возможно, вам придется переехать в большую квартиру или переехать в большую квартиру в вашем доме. Как работают спальни для жизни в помощниках?


Будет ли мой помощник платить за аренду?

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


Увеличится ли моя арендная плата?

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


Изменится ли мой ваучер?

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


Когда мне следует обратиться за помощью?

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


Следует ли мне включать моего помощника в мое заявление?

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


Что делать, если предоставленные мне формы необоснованны?

В то время как большинство проживающих в форме помощника являются разумными, в стране есть несколько жилищных властей, которые делают их формы настолько сложными и требовательными, что никто никогда не сможет получить помощника.Если вы столкнулись с необоснованной формой: Unreasonable Live In Aide Forms


Что произойдет с моим помощником, если я умру или уйду?

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


Что делать, если мне нужен другой помощник?

Вы можете сменить помощника в любое время.Вы можете в любой момент отстранить помощника от вашей жилищной помощи. Затем вы можете добавить нового помощника.

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


Что, если мой помощник не согласится уйти?

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


Будет ли мой помощник в моей аренде?

Большинство программ не рассматривают живых помощников в качестве арендаторов. Обычно они указываются в вашем жилищном договоре как «член семьи» и указываются в вашем договоре аренды как «жильцы» или «проживающие в помощнике».


Будет ли мой помощник в ваучере?

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


Как включить моего помощника в оформление жилищных документов

Каждый раз, когда вы заполняете документы, не забудьте написать «live in aide» рядом с именем вашего помощника.Вот пример оформления жилищных документов:

Пример. Помощница Тюльпана - ее сестра Дейзи. Также она живет с мужем. В своем заявлении она пишет:

  • Цветы тюльпана - Глава домохозяйства
  • Ольха - супруга
  • Daisy Flowers - Live in Aide

Как мне включить доход моего помощника?

Вам не нужно указывать финансовую информацию вашего помощника в ваших документах. Вы можете, если хотите, но иногда это приводит к случайностям и ошибкам в вашем деле.Вот что делают некоторые из наших читателей: в верхней части каждой финансовой страницы они пишут: «Живите на пособие, исключая доход в соответствии с политикой HUD. Финансы Live in Aide не включены в эту форму ».


Может ли мой помощник иметь члена семьи?

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

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

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


Дополнительные местные правила

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

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

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

Подробнее о: Как запросить исключение для HUD Live в политике помощи


Что я могу сделать, если мне отказали в просьбе о предоставлении помощи?

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

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

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

Если у инвалида есть нарушения развития (аутизм, черепно-мозговая травма, церебральный паралич, синдром Дауна, расщелина позвоночника, умственная отсталость и т. Д.), Также ознакомьтесь с разделом «Как исключить доход из IHSS и Medicaid Homecare

».

Узнать больше

💕 Жить в помощнике Пример: Джейн и Салли живут в квартире с двумя спальнями.Познакомьтесь с Джейн и Салли (пример аренды раздела 8)

💕 Живите в политике помощника. Несмотря на то, что политики HUD по проживанию в семье разрознены, самые последние правила в отношении пособий по найму и ваучеров можно найти в этом документе: Руководство по жилищным ваучерам - Глава о поиске и аренде жилья

🌸 Замечательная помощь и помощь, которую вы можете получить от помощника по дому: 10 секретов для людей с помощниками по дому

🌸 Все о Раздел 8: Раздел 8 Руководство для инвалидов и отважных

🌸 Ищете помощника? Где найти помощников по дому

🌸 Вот отличный информационный бюллетень с более подробной информацией о Live In Aides и разделе 8

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

🌸 Ищете помощника? Как найти прекрасных соседей по дому и опекунов

🌷 Группа Facebook: HUD и Раздел 8 для людей с ограниченными возможностями (и семьи)

🌷 Больше групп в Facebook: жилье для людей с ограниченными возможностями или хроническими заболеваниями

Что вы думаете?

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

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

Нравится:

Нравится Загрузка ...

.

Знакомство с Network.framework: современная альтернатива сокетам - WWDC 2018 - Видео

Скачать

Доброе утро.

Меня зовут Джош Грэссли, и я очень рад быть здесь сегодня утром, чтобы рассказать вам о Network.framework.

Network.framework - современная альтернатива розеткам.

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

Мы познакомим вас с API, проведя вас через создание ваших первых подключений.

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

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

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

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

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

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

Есть три основных области, в которых очень трудно правильно использовать розетки.

Первый - установление соединения.

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

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

Я знаю, потому что у нас есть.

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

В некоторых сетях используется так называемая автоматическая настройка прокси или PAC.

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

И теперь ваше приложение должно поддерживать прокси-серверы SOCKS и прокси-серверы HTTP-соединения, и это может быть действительно сложно.

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

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

Это может быть настоящим испытанием.

Так что подключиться к розеткам действительно сложно.

Вторая проблема с сокетами - это передача данных.

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

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

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

Когда вы используете неблокирующий режим, вы можете сказать ядру, что мне нужно 100 байт, и ядро ​​вернется и скажет: у меня есть 10 байт для вас, почему бы вам не вернуться позже.

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

Это может потребовать много работы, и добиться ее хорошей работы может быть настоящей проблемой.

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

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

Здесь есть много действительно сложных вещей.

Наконец, мобильность с розетками может стать серьезной проблемой по разным причинам.

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

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

Sockets не поможет вам в этом.

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

Мы думаем, что транспортный API должен работать лучше.

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

URLSession решает все эти проблемы за вас.

Он действительно ориентирован на HTTP, но также имеет потоковую задачу, которая дает вам прямой доступ к соединениям TCP и TLS.

Теперь вы, возможно, смотрите на это, и, возможно, вы не обманули, посмотрев описание в приложении WWDC.

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

Но оказывается, что это не так. URLSession построен на основе того, что мы называем Network.framework.

URLSession действительно фокусируется на всех битах HTTP и разгружает большую часть транспортных функций в Network.framework.

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

В ходе этих обсуждений мы получили отличные отзывы, мы вернули их и улучшили Network.framework на основе этого.

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

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

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

Он дает вам всю необходимую мощность, но вам не нужно платить за сложность, если она вам действительно не нужна.

Network.framework имеет невероятно умное соединение.

Подходит для ящиков с двойным стеком.Он обрабатывает только сети IPv6. Он обрабатывает PAC. Он обрабатывает прокси.

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

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

Имеет поддержку встроенной безопасности.

По умолчанию поддерживает TLS и DTLS.

Пользоваться очень просто.

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

Он доступен на iOS, macOS и tvOS как CAPI с автоматическим подсчетом ссылок, поэтому его легко использовать с Objective C, и он имеет невероятный Swift API.

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

Спасибо.

Хорошо, всем привет.

Меня зовут Томми Поли, я работаю в группе по работе с сетями в Apple.

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

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

Но вам может быть интересно, какие соединения подходят для использования с Network.framework.

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

Итак, первое, что я хочу выделить, - это игровые приложения.

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

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

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

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

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

Асинхронная модель для чтения и записи в сети.framework идеально подойдет для уменьшения этой буферизации.

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

Таким образом, они будут использовать гораздо более традиционные протоколы, только TLS поверх TCP.

Однако для таких приложений очень важно правильно обрабатывать сетевые переходы.

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

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

И это всего лишь три примера типов приложений, которые могут использовать такие низкоуровневые сети, как это.

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

Итак, когда вы хотите установить соединение с сервером, скажем, для почтового соединения, iMap с безопасностью, с TLS, вы начинаете со своего имени хоста mail.example.com.

У вас есть порт, к которому вы хотите подключиться, порт 993, и вы хотите использовать TLS, а также TCP. Так как же это будет выглядеть традиционно в сокетах? Что-то вроде этого для начала.

Вы бы взяли имя вашего хоста.

Вы должны вызвать некоторый DNS API для разрешения этого имени хоста.

Допустим, это getaddrinfo.

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

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

Вы вызовете сокет с соответствующим семейством адресов.

Вы зададите несколько вариантов розетки.

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

Затем вы вызываете connect для запуска TCP, а затем ждете доступного для записи события.

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

Так как это выглядит в Network.framework? И мы надеемся, что вам это кажется очень знакомым, но немного проще.

Итак, первое, что вы делаете, это создаете объект подключения.

А объект подключения основан на двух вещах.

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

Это также может быть сервис Bonjour, к которому я хочу подключиться.

А еще у меня есть параметры.

Параметры определяют, какие протоколы я хочу использовать, TLS, DTLS, UDP, TCP. Он определяет параметры протокола, которые мне нужны, а также пути, которые я хочу использовать для подключения.

Я хочу просто подключиться через что-нибудь или я хочу использовать только Wi-Fi? После того, как вы настроили свое соединение, вы просто вызываете start, чтобы начать работу, а затем ждете, пока соединение перейдет в состояние готовности.

И это все, что вам нужно сделать, чтобы установить полное TLS-соединение с вашим сервером.

И я думаю, вам понравится, как это выглядит в Swift.

Итак, вот что вы делаете.

Сначала вы импортируете сетевой модуль.

Затем вы создаете объект NWConnection.

Таким образом, NWConnection в Swift или C является фундаментальным объектом для чтения и записи данных.

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

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

А затем, чтобы определить, какие протоколы я хочу использовать, я передаю параметры, и поскольку это клиентское соединение, мне нужны только параметры по умолчанию, TLS и TCP.

Это может быть так же просто, как просто написать точечный TLS, и теперь у меня есть полноценное TLS-соединение.

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

Первое и самое важное состояние, которое вы хотите обработать, - это состояние готовности.

Готово означает, что ваше приложение готово к чтению и записи данных по этому соединению, оно полностью установлено, и если вы используете TCP и TLS, это означает, что рукопожатие TLS завершено.

Мы также сообщаем вам о состоянии ожидания.

Итак, в прошлом году в URLSession мы ввели ожидание подключения, и состояние ожидания NWConnection точно такое же.

И это всегда по умолчанию.

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

Мобильность - важная, важная часть этого API.

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

Итак, как только вы это настроите, вы просто вызываете start и предоставляете очередь отправки, по которой вы хотите получать обратные вызовы. Итак, я хочу разобраться, что происходит, когда вы вызываете start. Что на самом деле происходит? Итак, вот небольшая машина состояний, внутренности NWConnection. Когда мы начинаем с состояния настройки и вызываем start, мы переходим в состояние подготовки.

Таким образом, состояние подготовки делает гораздо больше, чем просто вызывает соединение через сокет TCP.

Для сокета TCP, это просто отправит SYN-пакет на сервер, который вы пытаетесь достичь.

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

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

Итак, это то, что мы называем установлением интеллектуального соединения.

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

В данном случае у нас есть Wi-Fi и сотовая связь.

И, как правило, мы предпочитаем сеть WiFi, потому что она дешевле для пользователя.

Итак, мы сначала рассмотрим это.

Затем проверяем, есть ли какие-то особые конфигурации в этой сети.

Есть ли VPN? Прокси есть? И мы оценим это для вас.

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

Итак, мы рассмотрим оба этих варианта.

Мы проверим, нужно ли нам использовать прокси, подключимся к нему, создадим там TCP-соединение.

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

А затем, если что-то пойдет не так с Wi-Fi, скажем, качество Wi-Fi радио станет очень плохим, потому что вы уходите от здания, мы действительно можем воспользоваться функцией, называемой поддержкой WiFi, и беспрепятственно вернуться к сотовой сети. , выполните там разрешение DNS и попробуйте подключения одно за другим.Таким образом, ваше соединение будет очень устойчивым, обрабатывает VPN, обрабатывает прокси-серверы и обеспечивает наилучшее возможное соединение. Теперь, конечно, вы можете не захотеть пробовать все эти варианты. Возможно, вы захотите ограничить действия, выполняемые при установлении соединения, и поэтому у нас есть много разных регуляторов и элементов управления, которые позволяют вам это делать, и сегодня я хочу выделить только три из них.

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

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

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

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

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

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

Вы вообще не хотите использовать IPv4 в своем соединении.

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

И это повлияет на ваше соединение, а также на разрешение DNS.

И, наконец, вы можете не захотеть использовать прокси для данного соединения. Возможно, ваше соединение не подходит для использования через прокси-сервер SOCKS.

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

Вот что происходит в состоянии подготовки.

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

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

В конце концов, надеюсь, ваше соединение будет установлено.

На этом этапе мы перейдем в состояние готовности.

И состояние готовности, как я упоминал ранее, - это когда ваше соединение полностью установлено.Это все протоколы в вашем стеке, например, вплоть до TLS.

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

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

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

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

Спасибо, Томми.

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

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

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

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

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

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

Чтобы это произошло, нам нужно разделить эти кадры на более мелкие части, которые мы можем отправлять в UDP-пакетах.

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

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

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

Есть одна вещь, которую мы здесь еще не рассмотрели, и это слушатель.

Итак, мы займемся этим сейчас.

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

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

В этом случае мы будем использовать camera.udp. Когда слушатель получает новое соединение, он передает это соединение блоку, который вы предоставляете как newConnectionHandler.

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

Итак, слушатели.

Если задуматься, мы только что реализовали эквивалент вызова listen на сокете UDP.

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

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

UDPClient будет отвечать за создание соединения с другой стороной и отправку кадров.

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

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

Используя имя, которое мне предоставили, и камеру.udp как тип. Мы также передали параметры UDP по умолчанию.

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

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

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

Здесь мы возьмем буквальные байты hello и создадим с их помощью объект данных. Чтобы отправить контент по соединению, мы можем вызвать connection.send и предоставить этот объект данных в качестве контента.

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

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

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

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

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

И все.

У нас есть класс UDPClient, и мы готовы к работе. Посмотрим на сервер.

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

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

Начиная со слушателя, мы просто создаем NWListener, используя параметры UDP по умолчанию.

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

Но поскольку мы используем сервис Bonjour, нам этого делать не нужно.

Чтобы настроить эту службу, я собираюсь установить в свойстве службы прослушивателя объект службы типа camera.udp.

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

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

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

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

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

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

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

Здесь мы начинаем с вызова connection.receive и передачи его в обработчик завершения.

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

Если бы мы не были подключены, вероятно, это то рукопожатие, которое клиент начинает с отправки.Мы просто повернемся направо и вызовем connection.send, передав тот же контент обратно, чтобы он был передан клиенту.

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

Вот и все. У нас есть UDPClient, у нас есть UDPServer, давайте попробуем.

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

Здесь только что появился сервер, и мы видим, что он рекламируется как Demo Mac, где я сказал остальной части системы просто дать мне имя.

Это у меня на телефоне. Если я нажму «Подключиться», я внезапно вижу видеокадры, передаваемые по сети через UDP Live.

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

На стороне сервера запущен прослушиватель Bonjour.

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

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

Спасибо, Эрик.

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

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

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

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

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

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

И способ, которым вы отправляете его по соединению, заключается в том, что вы просто вызываете connection.send и передаете эти данные.

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

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

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

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

И ключевым моментом здесь является тот блок обратного вызова, который мы вам даем.

Это называется contentProcessed.

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

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

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

И в этом обработчике завершения вы можете проверить две вещи.

Сначала вы можете проверить наличие ошибки.

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

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

Это позволяет ускорить обработку всех ваших данных.

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

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

.

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