Для чего предназначен толкатель грм: Как устроен газораспределительный механизм | Новости автомира

Содержание

Антифрикционное покрытие для деталей газораспределительного механизма

Рассмотрено применение антифрикционного покрытия MODENGY 1006 для распределительного вала, клапанов, толкателей и пружин клапанов, приводной цепи и звездочек цепной передачи.

Содержание: Особенности работы газораспределительного механизма автомобильных двигателей
Неисправности газораспределительного механизма автомобильных двигателей, связанные с износом узлов трения
Антифрикционное покрытие MODNGY 1006 для деталей газораспределительного механизма автомобильных двигателей

Особенности работы газораспределительного механизма автомобильных двигателей

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

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

Таким образом, в общем случае ГРМ автомобильных двигателей включает в себя:
  • Клапанную группу (впускные и выпускные клапаны, направляющие втулки клапанов и пружины клапанов с деталями крепления)
  • Передаточные детали (толкатели, направляющие втулки толкателей, штанги толкателей, коромысла, ось коромысел, рычаги привода клапанов, регулировочные шайбы и регулировочные болты)
  • Распределительные валы (имеют опорные шейки, впускные и выпускные кулачки, элементы приводов вспомогательных механизмов)
  • Привод распределительных валов (при цепном приводе – ведущие и ведомые звездочки, роликовые цепи, натяжное устройство, успокоитель)

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


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

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

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

Цилиндрический толкатель ГРМ автомобильных двигателей представляет собой металлический стакан, установленный с зазором в отверстии головки блока цилиндров между кулачком распределительного вала и торцем стержня клапана. Для уменьшения трения в верхнем торце толкателя часто устанавливается регулировочная шайба из антифрикционных материалов толщиной 3…4 мм, с которой происходит контакт рабочей поверхности кулачков. Это позволяет уменьшить степень износа толкателя и кулачков распределительного вала.

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

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

Клапаны ГРМ работают в условиях ударных нагрузок при высоких температурах. Ударные нагрузки возникают в момент открытия и закрытия и являются знакопеременными, что является опасным с точки зрения усталостной прочности. Тарелка выпускного клапана нагревается потоком горячих газов, и ее температура достигает в среднем 800…900 °С. Температура конца стержня выпускного клапана при этом составляет 150…200 °С. Работоспособность клапана в таких условиях обеспечивается применением надлежащих материалов и определенной конструкции деталей клапанной группы.

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

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

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

Недостатком уплотнения стержня с помощью маслосъемного (маслоотражательного) колпачка является неэффективное смазывание пары трения «стержень клапана – направляющая втулка». В этой связи клапан и направляющая втулка должны выполняться из износостойких и жаропрочных материалов, а их поверхности необходимо защищать специальными антифрикционными покрытиями. Антифрикционное покрытие MODENGY 1006 хорошо зарекомендовало себя в качестве долговременной смазки стержней клапанов ГРМ автомобильных двигателей.

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

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

Одним из способов повышения долговечности пружин является защита поверхностей возможного контакта витков с помощью антифрикционных покрытий. Антифрикционное покрытие MODENGY 1006 успешно применяется в автомобильной промышленности для повышения износостойкости клапанных пружин ГРМ автомобильных двигателей.

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

Для повышения долговечности цепная передача нуждается в постоянном смазывании. В то же время абразивные частицы, оседая на смазку, затрудняют вращение звеньев цепи и повышают интенсивность ее изнашивания. Применение антифрикционного покрытия MODENGY 1006 на основе твердых смазочных материалов для долговременной смазки цепей и звездочек привода ГРМ автомобильных двигателей позволяет снизить интенсивность изнашивания деталей привода и повысить его долговечность.

Антифрикционное покрытие MODENGY 1006 для деталей газораспределительного механизма автомобильных двигателей

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

Антифрикционное покрытие MODENGY 1006 представляет собой композицию твердых смазочных веществ с очень малыми размерами частиц (дисульфид молибдена, графит), распределенных в органическом связующем агенте. Твердые смазочные материалы при нанесении связываются между собой и с поверхностью детали с помощью полимерной связующей матрицы и образуют после испарения растворителя долговечную сухую пленку со смазочными защитными функциями толщиной 20-30 мкм. Отверждение покрытия происходит при его выдержке в течение 20 минут при температуре  +200 °С.


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

Презентация к уроку «Механизмы двигателя – КШМ и ГРМ» — презентация на Slide-Share.ru 🎓

1

Первый слайд презентации

Презентация к уроку по теме: «Механизмы двигателя – КШМ и ГРМ»

Изображение слайда

2

Слайд 2: Газораспределительный механизм

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

Изображение слайда

3

Слайд 3: Устройство ГРМ

Механизм газораспределения включает в себя 1 – шестерня распределительного вала; 2 – упорное кольцо; 3 – упорный фланец; 4 – толкатели; 5 – впускной клапан; 6 – разжимная пружина; 7 – направляющая втулка клапана; 8 – наружная пружина; 9 – сухарик; 10 – тарелка; 11 – регулировочный винт декомпрессионного механизма; 12 – коромысло клапана; 13 – регулировочный винт; 14 – рукоятка управления декомпрессором; 15 – валик декомпрессора; 16 – ось коромысел; 17 – стойка; 18 – выпускной клапан; 19 – штанги; 20 – внутренняя пружина; 21 – распределительный вал; 22 – втулка.

Изображение слайда

4

Слайд 4: Принцип действия ГРМ

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

Изображение слайда

5

Слайд 5: Детали ГРМ Распределительный вал

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

Изображение слайда

6

Слайд 6: Впускные и выпускные клапана и пружины

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

Изображение слайда

7

Слайд 7: Клапан

1 – клапан; 2 – тарелка клапана; 3 – сухарики; 4 – втулка сухариков; 5 – пружины; 6 – опорная шайба пружин; 7 – направляющая втулка клапана.

Изображение слайда

8

Слайд 8: Передаточ ные детали

1- штанга; 2 – грибовидный толкатель; 3 – втулка толкателя; 4 – толкатель с выпуклым днищем; 5 – кулачки распределительного вала; 6 – толкатель ввиде стаканчика с плоским дном; 7 – грибовидный толкатель с кольцевой выемкой; 8 – ось ролика; 9 – ролик.

Изображение слайда

9

Слайд 9: Штанга, толкатели

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

Изображение слайда

10

Слайд 10: Передаточные детали

А – с углублением в наконечнике штанги. Б – со сферическим наконечником штанги. 1 – штанга; 2 – регулировочный винт; 3 — заглушка; 4 – контргайки; 5 – коромысло; 6 – пружина; 7 – ось коромысла; 8 – стойка; 9 – болт штуцера; 10 – отверстие для масла.

Изображение слайда

11

Слайд 11: Коромысло

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

Изображение слайда

12

Слайд 12: Распределительные шестерни

Распределительные шестерни, стальные. Они размещены в картере шестерен и предназначены для передачи вращения от коленчатого вала на распределительный вал и валы топливного, гидравлического и масляного насосов. Вращение на эти шестерни передается через промежуточную шестерню. 1- шестерня привода гидронасоса; 2- шестерня распределительного вала; 3- промежуточная шестерня; 4- шестерня привода ТНВД; 5- ведущая шестерня масляного насоса; 6- шестерня коленчатого вала.

Изображение слайда

13

Слайд 13: Диаграмма фаз газораспределения

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

Изображение слайда

14

Слайд 14: Неисправности ГРМ

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

Изображение слайда

15

Слайд 15: Контрольные вопросы

1. Для чего предназначен ГРМ? Предназначен для своевременного впуска в цилиндры воздуха и выпуска отработавших газов. 2. Что включает в себя ГРМ? Распределительный вал, толкатель, штанга, регулировочный винт, коромысло, ось коромысла, тарелки, сухарики, клапана впускной и выпускной, пружины, втулки. 3. Что называют фазами газораспределения? Фазами газораспределения называют продолжительность открытия клапанов. 4. Почему диаметр тарелок впускных клапанов больше, чем у выпускных? Для лучшего наполнения цилиндров. 5. Почему на клапане устанавливают две пружины? Наличие двух пружин уменьшает их размеры и облегчает условия работы. 6. Какие детали и в какой последовательности передают движение от коленчатого вала к клапанам? Шестерня коленчатого вала- шестерня распределительного вала- кулачок распределительного вала – толкатель – штанга – регулировочный винт – коромысло нажимает на стержень клапана и, преодолевая сопротивление пружин, открывает клапан.

Изображение слайда

16

Слайд 16: Контрольные вопросы

7. Из какого материала изготавливают впускные и выпускные клапана? Клапаны изготавливают из легированной стали: впускной – из хромистой, а выпускной – из сильхромовой (жаростойкой). 8. Для чего предназначено коромысло? Коромысло, предназначено для воздействия на клапан с целью его открытия. 9. Для чего предназначены толкатели? Толкатели предназначены для передачи усилия от кулачка распределительного вала к штангам. 10. Какой тип толкателя установлен на дизеле Д-240? У дизеля Д-240 толкатель стальной, грибовидный, со сферической нижней опорной поверхностью. 11. Для чего предназначены штанги? Штанги предназначена для передачи усилия от толкателя к коромыслу. 12. Какой тип штанги установлен на дизеле А-41? У дизеля А-41 штанга представляет собой стальную трубку, в торцах которой запрессованы наконечники с отверстиями для прохода масла от толкателя к коромыслу. 13. Почему диаметр шестерни коленчатого вала в два раза меньше диаметра шестерни распределительного вала? В 4-хтактных двигателях за один рабочий цикл впускной и выпускной клапаны открываются один раз. За два оборота коленчатого вала распределительный вал должен сделать только один оборот.

Изображение слайда

17

Последний слайд презентации: Презентация к уроку по теме: «Механизмы двигателя – КШМ и ГРМ»: Используемая литература

1. Пучин, Е.А. Техническое обслуживание и ремонт тракторов: учебное пособие для нач. проф. образования/ Е.А. Пучин. – 3-е изд., перераб. и доп. — М.: Издательский центр «Академия», 2010. – 208 с. 2. Родичев, В.А. Тракторы: учебное пособие для нач. проф. образования/ В.А.Родичев. – 5-е изд., перераб. и доп. – М.: Издательский центр «Академия», 2009. – 228 с.

Изображение слайда

Компоновка механизма газораспределения, ГРМ. Устройство автомобильных двигателей

Похожие главы из других работ:

Двигатели внутреннего сгорания

4. Построение диаграммы фаз газораспределения

Радиус кривошипа коленвала, м: r = S / 2, (18) r = 0,083/2 = 0,0415 м 4.2 Отрезок ОО1 (см. диаграмму фаз газораспределения, рис. 3): , (19) где r — радиус кривошипа в масштабе индикаторной диаграммы (r=55 мм) — коэффициент; , (20) lш — длина шатуна…

Конструкция тракторов и автомобилей

4. Механизм газораспределения ДВС

1. Выполнить принципиальные схемы: — механизма газораспределения бензинового двигателя. — привода механизма газораспределения дизельного двигателя. — общее устройство и регулировочные параметры. Бензиновый двигатель ВАЗ-2106…

Модернизация системы охлаждения двигателя «Газели»

2.1 Кривошипно-шатунный механизм и механизм газораспределения

Блок цилиндров отлит из алюминиевого сплава. Отливки блока могут быть выполнены двумя способами: литьем под давлением и литьем в кокиль. В блок цилиндров вставлены отлитые из износостойкого чугуна «мокрые» гильзы цилиндров…

Модернизация системы охлаждения двигателя ЗМЗ

2.1 Кривошипно-шатунный механизм и механизм газораспределения

Блок цилиндров отлит из алюминиевого сплава. Отливки блока могут быть выполнены двумя способами: литьем под давлением и литьем в кокиль. В блок цилиндров вставлены отлитые из износостойкого чугуна «мокрые» гильзы цилиндров…

План порта и расчет причальных сооружений

5.2 КОМПОНОВКА ПОРТОВЫХ ВОД

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

Привод специальный

5. Компоновка редуктора

Проект дизельного двигателя для сельскохозяйственного трактора номинальной мощностью 70 кВт

7. Расчёт механизма газораспределения

Проектирование конструкции корпуса судна

1. КОМПОНОВКА КОРПУСА

Расчет автомобильного двигателя

6.2 Клапанные механизмы газораспределения

В клапанных ГРМ клапаны, перекрывающие впускные и выпускные отверстия цилиндров, называют соответственно впускными и выпускными. Широкое распространение получили конструкции двигателей с двухклапанными ГРМ…

Расчет автомобильного двигателя

7.1 Расчет клапана газораспределения двигателя

Из теплового расчёта имеем: диаметр цилиндра D =115 мм, площадь поршня ; частоту вращения при номинальной мощности =2800 ; угловую частоту вращения коленчатого вала ; среднюю скорость поршня = 10…

Тележка полукозлового крана

Компоновка механизма подъема

Рис…

Тележка полукозлового крана

2.4 Компоновка механизма передвижения тележки

Рис.8…

Технология ремонта газораспределительного механизма автомобиля КАМАЗ 53212 с разработкой технологии восстановления толкателя

1. Техническое описание механизма газораспределения и его основные характеристики

Механизм газораспределения предназначен для впуска в цилиндры воздуха и выпуска отработавших газов…

Технология ремонта газораспределительного механизма автомобиля КАМАЗ 53212 с разработкой технологии восстановления толкателя

2. Технологический процесс разборки, сборки механизма газораспределения

РАЗБОРКА ДВИГАТЕЛЯ Трудоемкость — 410,0 чел.мин 1. Установить подразобранный двигатель на стенд для разборки, сборки. /Кран-балка, подвеска, стенд/. 2. Вывернуть рым-болт 16 /Рис.4/ передний, снять регулировочные шайбы 15. /Вставка специальная/. 3…

Тракторы и автомобили

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

Наиболее заметный внешний признак неисправности в механизме газораспределения — стук в зоне расположения клапанов, распределительных зубчатых колес и распределительного вала, снижение плотности посадки клапанов в гнезде (клапан «сечет»)…

Масштабируемая связь в реальном времени с Pusher

Что и почему?

Pusher — это размещенная служба API, которая упрощает добавление данных и функций в режиме реального времени в веб-приложения и мобильные приложения.

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

В контексте доставки данных в режиме реального времени доступны другие размещенные и размещенные на собственном сервере службы. Это зависит от варианта использования того, что именно нужно, например, если вам нужно передавать данные всем пользователям или что-то более сложное, имеющее определенные целевые группы. В нашем случае Pusher хорошо подходил, так как решение было основано на простоте использования, масштабируемости, частных и общедоступных каналах, веб-перехватчиках и автоматизации на основе событий.Другими вариантами, которые мы рассматривали, были Socket.IO, Firebase & Ably и т. д. 

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

Некоторые из наиболее распространенных вариантов использования Pusher:

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

2. Потоки активности : Поток активности, который публикуется, когда что-то изменяется на сервере или кто-то публикует его по всем каналам.

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

4. Чаты : Вы можете использовать Pusher для одноранговой или одноранговой многоканальной связи.

В этом блоге мы сосредоточимся на использовании Channels , который является псевдонимом API обмена сообщениями Pub/Sub для приложения на основе JavaScript . Pusher также поставляется с Chatkit и Beams (Push Notification) SDK/API.

  • Chatkit разработан, чтобы максимально упростить интеграцию чата в ваше приложение. Это позволяет вам добавить групповой чат и функцию чата 1 на 1 в ваше приложение.Он также позволяет добавлять вложения файлов и онлайн-индикаторы.
  • Лучи используются для добавления push-уведомлений в ваше мобильное приложение. Он включает в себя SDK для удобного управления push-токенами и отправки уведомлений.

Шаг 1: Начало работы

Настройте свою учетную запись на панели инструментов Pusher и получите бесплатные ключи API.

Источник изображения: Pusher

  1. Нажмите на каналы
  2. Создайте приложение. Добавьте сведения в зависимости от проекта и среды
  3. Щелкните вкладку Ключи приложения, чтобы получить ключи приложения.
  4. Вы также можете проверить начальную страницу. Это даст фрагменты кода, чтобы вы начали.

Добавьте Pusher в свой проект:

CODE: https://gist.github.com/velotiotech/f09f14363bacd51446d5318e5050d628.js

или с помощью npm

CODEgit: https://gist.github.com/velotiotech/f09f14363bacd51446d5318e5050d628.js 423115d0943c1b882c913e437c529d11.js

Шаг 2. Подписка на каналы

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

  • Публичные каналы : Эти каналы являются общедоступными по своей природе, поэтому любой, кто знает название канала, может подписаться на канал и начать получать сообщения с канала. Общедоступные каналы обычно используются для передачи общей/общедоступной информации, которая не содержит какой-либо защищенной информации или пользовательских данных.
  • Частные каналы : Эти каналы имеют механизм управления доступом, который позволяет серверу контролировать, кто может подписываться на канал и получать данные с канала.Все частные каналы должны иметь префикс private- перед именем. Они обычно используются, когда серверу необходимо знать, кто может подписаться на канал, и проверять подписчиков.
  • Каналы присутствия : Это расширение частного канала. Помимо свойств, которыми обладают приватные каналы, он позволяет серверу «регистрировать» информацию пользователей о подписке на канал. Это также позволяет другим участникам определять, кто находится в сети.

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

КОД: https://gist.github.com/velotiotech/d8c27960e2fac408a8db57b92f1e846d.js

Шаг 3. Создание каналов

Для создания каналов вы можете использовать панель управления или интегрировать ее со своим сервером. Подробнее о том, как интегрировать Pusher с вашим сервером, вы можете прочитать (Server API). Вам нужно создать приложение на панели инструментов Pusher и использовать его для дальнейшей активации событий в вашем приложении.

или 

Интегрируйте Pusher с вашим сервером. Вот пример фрагмента из нашего приложения узла:

КОД: https://gist.github.com/velotiotech/6f5b0f6407c0a74a0bce4b398a849410.js

Шаг 4. Добавление безопасности

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

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

КОД: https://gist.github.com/velotiotech/9369051e5661a95352f08b1fdd8bf9ed.js

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

: https://gist.github.com/velotiotech/fb67d5efe3029174abc69a910e1.js

Шаг 5. Масштабирование по мере роста

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

Источник изображения: Pusher

Заключение

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

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

Pusher выпускает клип на песню «Back in Time» | Канадские СМИ Beats | Дженна Мелансон

Фото: Кимберли Ли

Торонто, исполнитель/продюсер из Онтарио, Pusher объединяет свою страсть к гипер-попу, поп-культуре и видеоиграм в своем новом видео «Back In Time».Этот сингл является четвертым релизом его грядущего дебютного альбома Stay-At-Home Popstar.

На новой трассе Пушер делит,

Back in Time – это песня о ностальгии по более простому времени, позволяющему сбежать от проблем настоящего – выборочно забывая, что ни один момент в прошлом не был столь удивительно чистым, как нам иногда хочется представить. В музыкальном видео, созданном Occupied VR (который также снял видео для моего последнего сингла Advertising), я играю более дюжины персонажей и рассказывает историю музыканта, которого Совет Времени вызвал, чтобы отправиться в путешествие во времени, чтобы наймите самую лучшую группу из возможных (или, по крайней мере, несколько музыкантов / отсылок к фильмам), чтобы доказать ценность музыкантов для капиталистических роботов-повелителей далекого будущего. »

«Back in Time» следует за первыми тремя релизами грядущего альбома Пушера — заглавным треком с технологичным уклоном «I Can Give It Up», за которым следует гимн миллениалов о жилищном кризисе «I Can’t Believe It» и совсем недавно «Реклама» с уклоном в инди-рок.

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

Связь с Pusher
Веб-сайт
Facebook
Twitter
Instagram

Меня зовут Дженна, я основатель и редактор Canadian Beats.У меня была сильная любовь к канадской музыке, которая началась много лет назад. У меня есть страсть к продвижению этих талантливых канадских групп и исполнителей, и так появились Canadian Beats. Я так горжусь тем, во что она превратилась за последние несколько лет, когда многие талантливые любители музыки и писатели собрались вместе, чтобы распространять информацию о канадской музыке.

Умело против Толкача | Ably Realtime

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

Дельта-сжатие Протоколы . Соединения Аутентификация на основе токенов Ключи API Регламент

Представленные здесь сравнения: (i) получены из общедоступной информации и открытых источников, доступных по состоянию на октябрь 2019 г., и поэтому могут быть устаревшими; (ii) предназначены в качестве отправной точки для дальнейшего расследования; и (iii) не гарантируется 100% точность или полнота.Читателю рекомендуется провести независимую оценку и не полагаться исключительно на представленную здесь информацию. Пожалуйста, свяжитесь с нами, если вы считаете, что информация здесь неточна или неполна.

Производительность и доступность Умело Толкатель Почему это важно?
Глобальные центры обработки данных 15

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

По одному на приложение.

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

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

Узнайте больше о сети Ably

Граничное ускорение Точки присутствия (PoPs) 205

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

Неизвестно. Acceleration Points of Presence (PoPs) обеспечивают более стабильные соединения и низкую задержку для клиентов, подключающихся к сети, улучшая их работу.

Узнайте больше о точках присутствия Ably и их более чем 205 точках

Маршрутизация на основе задержки Да.

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

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

Узнайте больше о DNS-маршрутизации Ably на основе задержки

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

Узнайте о нашем бинарном протоколе

Глобальная медианная задержка туда и обратно менее 65 мс Да.

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

Неизвестно.

Pusher не делится задержками.

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

Просмотр статистики стороннего тестирования

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

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

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

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

Узнайте о ячеистой архитектуре Ably

Без центральной точки отказа Да.

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

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

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

Узнайте, как мы устраняем единую точку отказа

Самовосстанавливающиеся кластеры Да.

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

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

Узнайте больше о наших самовосстанавливающихся кластерах

Автономные центры обработки данных Да.

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

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

Узнайте, где расположены серверы Ably

Данные реплицированы в нескольких регионах Да.

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

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

Узнайте о гарантии доставки сообщений Ably

QoS и гарантия доставки сообщений

(только для Ably)

Да.

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

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

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

Узнайте о QoS Ably и гарантии доставки сообщений

Непрерывность и восстановление состояния соединения

(уникально для Ably)

Да.

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

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

Узнайте больше о восстановлении состояния соединения

Гарантия бесперебойной работы Да.

Ably предлагает различные уровни гарантии безотказной работы в зависимости от ваших потребностей. Для всех наших корпоративных клиентов мы предоставляем SLA с периодом безотказной работы 99,999%.Если мы не сможем выполнить вашу цель SLA, мы предлагаем возмещение.

Pusher не предлагает SLA, если вы не являетесь корпоративным клиентом.

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

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

Основные функции
Наличие канала Да.

Ably поддерживает настраиваемое количество участников присутствия и поддерживает 200 участников по умолчанию, и многие другие по запросу. Мы также поддерживаем обновления государств-членов, такие как местоположение устройства GPS.

Да.

Pusher поддерживает присутствие максимум 100 участников на канал.

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

Узнайте больше о присутствии

История сообщений (сохраняемые данные) Да.

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

Pusher не поддерживает историю сообщений.

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

Узнайте больше о нашем History API

Надежный заказ сообщений
(Уникально для Ably)
Да.

Ably гарантирует, что сообщения доставляются постоянно подключенным подписчикам в том порядке, в котором они были опубликованы на каждом канале, используя шаблон «первым пришел — первым обслужен» (FIFO).

Pusher не поддерживает надежный порядок сообщений.

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

Узнайте больше о надежном заказе

Публикация идемпотентных сообщений Да.

Ably поддерживает идемпотентную публикацию во всех SDK собственной клиентской библиотеки.

Pusher не поддерживает идемпотентную публикацию.

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

Узнайте больше об идемпотентной публикации с помощью Ably

Сжатие дельта-сообщений Да.

Ably поддерживает дельта-сжатие сообщений для каждого канала.

Pusher не поддерживает дельта-сжатие сообщений.

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

Узнайте больше о сжатии дельта-сообщений

Push-уведомления Да.

Ably предоставляет унифицированный API для доставки push-уведомлений, включая встроенные push-уведомления iOS и Android.

Да.

Pusher предоставляет push-уведомления через свой продукт «Beams».

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

Узнайте больше о push-уведомлениях

Очереди сообщений и рабочие очереди
(уникально для Ably)
Да.

Данные, опубликованные в системе реального времени Ably, могут быть перемещены в традиционные очереди сообщений для обработки в реальном времени или пакетной обработки.Мы также поддерживаем AWS SQS, RabbitMQ и AMQP. Умело справляется со всей сложностью этого.

Очередь помогает масштабировать потребление сообщений в реальном времени.

Узнайте больше о наших очередях

Вебхуки Да.

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

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

Узнайте больше о веб-перехватчиках

Вызов бессерверной облачной функции
(уникально для Ably)
Да.

Ably может запускать бессерверные функции любых сторонних облачных провайдеров, таких как Amazon Lambda, Microsoft Azure или Google Function.

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

Узнайте больше о событиях Reactor

Интеграция сторонних сервисов Да.

Ably может подключаться к сторонним службам, таким как Cloudflare Functions, Zapier, IFTTT и Tray.io.

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

Узнайте больше о сторонних интеграциях

Пожарный шланг данных в реальном времени
(уникально для Ably)
Да.

Потоковая передача данных в реальном времени, опубликованных на платформе Ably, непосредственно в другой потоковый сервис или службу очередей, например Amazon Kinesis, Apache Storm или Kafka, AWS SQS и RabbitMQ.

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

Узнайте больше о пожарном шланге Reactor

Конечная точка личного домена (CNAME) Да.

Ably поддерживает пользовательские домены для наших корпоративных клиентов, позволяя им подключаться к Ably с помощью CNAME, например «realtime.your-company.com».

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

Узнайте больше о наших пользовательских доменах

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

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

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

Узнайте больше о API Streamer

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

Узнайте больше о создании программ API реального времени на основе сети Ably

Клиентские библиотеки и поддержка протоколов
Собственные клиентские библиотеки для всех популярных платформ Да.

Ably предоставляет более 40 клиентских библиотек SDK для широкого спектра популярных платформ.

Да.

Pusher предлагает более 40 SDK.

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

Посмотреть SDK нашей клиентской библиотеки

Поддержка WebSocket 1-го класса Да.

Протокол Ably основан на WebSocket с первоклассной поддержкой WebSocket.

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

Посмотреть наши поддерживаемые транспорты

Возврат к Comet (XHR) и длинный опрос для старых браузеров Да. Да. Хотя большинство современных устройств поддерживают WebSockets, бывают ситуации, когда устройство или сетевая среда требуют использования транспорта HTTP.

Посмотреть наши поддерживаемые транспорты

Поддержка проприетарных протоколов других платформ реального времени
(уникально для Ably)
Да.

Платформа Ably не зависит от протокола и обеспечивает совместимость протоколов. Мы поддерживаем другие проприетарные протоколы реального времени и обеспечиваем совместимость с протоколом Ably и другими предлагаемыми нами протоколами.

Миграция с одного провайдера реального времени на другого должна быть простой.

Узнайте больше о наших адаптерах протоколов

Поддержка MQTT Да.

Платформа Ably не зависит от протокола и обеспечивает совместимость протоколов. Умело поддерживает MQTT

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

Узнайте, какие протоколы мы поддерживаем

Поддержка протокола событий, отправленных сервером (HTTP Streaming) Да. Server-Sent Events — это упрощенный протокол, предназначенный только для подписки, когда вашим конечным пользователям нужно только получать данные о новых событиях.

Узнайте, какие протоколы мы поддерживаем

AMQP и STOMP Да. AMQP и STOMP предназначены, среди прочего, для подготовки очередей и настройки маршрутизации.

Узнайте больше о AMQP и STOMP по телефону Ably

Библиотека браузера White-label Да.

Ably может предоставить библиотеку Javascript для браузера с белой маркировкой с пространством имен по вашему выбору и без ссылок на Ably в коде.

Сохраняйте чистоту кода с помощью библиотек white label.

Узнайте о наших библиотеках White Label

Безопасность
TLS-соединение Да. Да. TLS обеспечивают шифрование всех передаваемых данных.

Узнайте больше о SSL/TLS

Аутентификация на основе токенов Да.

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

Да.

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

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

Узнайте больше об аутентификации Ably

Поддержка веб-токена JSON Да.

Ably позволяет не только встраивать токены Ably в JWT, но и подписывать JWT ключами Ably API и использовать их для аутентификации.

Частично.

Pusher поддерживает JWT только в определенных продуктах.

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

Узнайте больше об использовании JWT с Ably

Настраиваемые разрешения для закрытого ключа Да.

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

— это стандартный метод защиты доступа к приложению.

Узнайте больше о ключах API

Настраиваемые разрешения канала Да.

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

Сохраняйте контроль над своими каналами, например, требуйте SSL/TLS или идентифицируйте только аутентифицированных клиентов на канале.

Подробнее о правилах канала

Шифрование полезной нагрузки сообщений Да.

Ably поддерживает шифрование AES.

Beta

Сквозное шифрование для каналов Pusher в настоящее время находится в стадии бета-тестирования.

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

Узнайте больше о шифровании Ably

Соответствие
Соответствует GDPR ЕС Да.

Действующие процедуры и процессы для регулирования GDPR ЕС.

«Pusher стремится соблюдать требования GDPR в долгосрочной перспективе». EU GDPR введен для защиты потребителей и их данных.

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

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

Узнайте больше о SOC 2, тип 2

Соответствует HIPAA Да.

У Ably много клиентов в сфере здравоохранения, с которыми мы заключаем соглашения о деловом партнерстве.

В настоящее время Pusher не подписывает соглашения о деловом партнерстве с клиентами.

HIPAA определяет, как следует защищать информацию, позволяющую установить личность, в сфере здравоохранения в США.

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

Значение
Прозрачное ценообразование на основе использования Да.

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

Пакеты толкателей оцениваются по уровням. Если вы использовали пакет Pro за 99 долларов США с 2 тыс. подключений и 4 млн сообщений, а позже вам потребовалось 3 тыс. подключений, но такое же количество сообщений, вам пришлось бы перейти на пакет Business за 299 долларов (в 3 раза дороже).С Ably вы просто заплатите за дополнительные 1000 подключений.

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

Рассчитайте использование с помощью калькулятора цен Ably

Другие важные вещи

Girl Pusher: время сумасшедшего клоуна

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

«Это лучший комплимент, который я когда-либо получал», — отвечает Джулиано.

Шоу резко обрывается, когда Хайн говорит: «Мы закончили — мой компьютер сдох», и дуэт уходит со сцены. Чувство облегчения пульсирует в толпе. Демон был изгнан.

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

«Мой скальп больше не на моей голове, — усмехается она.«Посмотрите на руки Джаррода!» (Руки Хайна покрыты волдырями от предыдущего выступления.) Они оба говорят о том, что во время живых выступлений впадают в состояние фуги, и в этом есть смысл. Звук Girl Pusher является одновременно первобытным и цифровым, зловещим и пульсирующим. Хайн, который родом из OC и до сих пор там живет, создает биты и патчи из сэмплов звонков в службу экстренной помощи и «записей Марси», наполненной травмами записи 1967 года о побеге подростка-хиппи. Как ни странно, Джулиано был юным автогонщиком и звездой легкой атлетики, когда рос в Бейкерсфилде, штат Калифорния.Поющая песни группы в айфон, ее бритая голова, острые черты лица и неистовая скороговорка напоминают более дерзкую Файрузу Балк.

Габби Джулиано и Джаррод Хайн, дуэт, составивший «Девушку-толкача», прорываются сквозь декорации. Джулиано в красном комбинезоне, лицо накрашено, как у клоуна. Иногда они напоминают мне The Slits или X-Ray Spex; в других случаях это Скуки и Салем. Они хаотичны, индустриальны, техно и грубы, и Джулиано проводит большую часть своего времени, корчась или раскачиваясь взад и вперед в каком-то гипнотическом состоянии.Каждый удар Хайна — это удар сердца; каждый крик Джулиано — это чистка.

«Ты пугаешь меня до чертиков, но, думаю, мне это нравится!» — кричит кто-то из толпы эмо-рэпа всех возрастов.

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

У группы есть яд, но он приходит честно. История Girl Pusher началась в канун Нового года в 2015 году, сразу после того, как Джулиано сказал, что она пережила ужасный, травмирующий эпизод, который заставил ее чувствовать себя несчастной и злой.Не в настроении покидать свой дом, она завершила год, выразив свой гнев в песне. Она попросила Хайна прислать ей несколько битов и провела ночь, записывая вокал. Из нее лились тексты — о травмирующем опыте, и собственных сомнениях и страхах по поводу случившегося.

На следующий день они выпустили свой дебютный EP JAN.1 . Это положило начало циклу ярости, освобождения, облегчения, повторения, который с тех пор сопровождает Girl Pusher. Что бы ни кипело внутри Джулиано, выплеснулось в таких песнях, как «A Lot of Boys Like Me Though» (с EP Don’t Die 2016 года), невероятно интенсивном ведре конфронтационных текстов, кричащих над цифровыми обломками.

Джаррод носит хлопковый комбинезон HUGO, носки и туфли свои, Габби носит деконструированное джинсовое пальто Faustine Steinmetz, куртку, надетую под ним, носки ее собственного, расшитый блестками топ Marques’Almeida, джинсы GuessPhotography Benedict Brink, стиль Emma Wyman

«Когда что-то (травмирующее) случается вы подвергаете сомнению все свое существование», — говорит Джулиано. «Это почти похоже на внетелесный опыт, потому что вы просто больше не чувствуете себя самим собой. Ты находишь любую причину ненавидеть себя, даже если она недействительна, и поэтому я кричу (под песню): « Я такая толстая / Я такая уродливая… Я такая безобразная / Я прячусь». ’ Я знаю, что все это неправда, но так оно и есть. Я не знаю; это действительно пиздец».

Несмотря на все это, негатив и боль, в музыке Girl Pusher сияет надежда. То, что является катарсисом для Джулиано и Хайна, оказывает такое же мощное воздействие на их аудиторию. То, что может звучать как антипатия к некоторым, служит объединяющим лозунгом для других или просто заставляет их чувствовать себя менее одинокими. Участники группы описывают детей, с которыми они разговаривают на концертах: иногда они плачут, иногда обнимаются.Это немного похоже на групповую терапию. «Это действительно банально, но да, мы в темном месте, и это наш катарсис», — говорит Джулиано.

Girl Pusher работают над новым EP, который они планируют выпустить без предрелизного промо, без ажиотажа и уж точно без менеджеров. «Если какой-то ребенок хочет, чтобы мы играли в Лос-Анджелесе, мы будем играть в Лос-Анджелесе, — говорит Хайн. «Нас дважды летали в Нью-Йорк дети младше 20 лет. Они купили нам билеты на самолет, чтобы мы могли там играть. Для чего мне нужен менеджер? У нас есть несколько сумасшедших фанатов.

«Мой скальп больше не на моей голове» — Габби Джулиано

Модельер из Лондона Клэр Бэрроу впервые познакомилась с группой на одном из их шумных шоу в Лос-Анджелесе в прошлом году. «Я чувствую, что они делают то, что мы все действительно хотим услышать», — говорит она. «Что-то новое, не слишком ностальгическое, экспериментальное, но в то же время родственное». Барроу был особенно впечатлен присутствием Джулиано и через месяц попросил ее смоделировать некоторые украшения.В сентябре она пригласила группу выступить с Брук Кэнди в модном магазине H Lorenzo в Западном Голливуде.

Даже в такой обстановке Girl Pusher — идеальная группа для всех возрастов. Несмотря на присущую им жестокость (очевидно, Джулиано много истекал кровью в ту ночь), группа стремится создать безопасное пространство для всех — место, где можно быть уродом и не чувствовать себя из-за этого облажавшимся. «Это дерьмо важно для нас, — говорит Джулиано. «Будь собой и чувствуй себя в безопасности. Скажи нам, если мы играем с твоим обидчиком или насильником, потому что мы прекратим это дерьмо.Быстрее, чем что-либо. У нас было раньше, и мы сделаем это снова. Нет раскаяния. Во-вторых, если вам что-то не нравится и вам просто нужно быть честным и уязвимым с нами, спасибо. Ты ни хрена мне не должен. Кто-то позвонил Джарроду (в радиошоу, которое он ведет на KXLU, станции Университета Лойолы Мэримаунт) и сказал: «Я трансвестит». Ничего, если я приду?»

«Я такой: «Да! Совершенно правильное место», — говорит Хайн. «(В другой раз) ко мне на шоу подошла девушка и сказала: «Мой бывший здесь», а я такой: «Блин, проблем нет.Я понял тебя».

Бэрроу считает, что эта инклюзивность делает Girl Pusher парадоксом: положительное влияние, несмотря на безжалостно мрачное звучание. «На шоу вы видели, как Габби разбивает себе голову микрофоном, кровь стекает по ее клоунскому гриму на пол, Брук Кэнди читает рэп с выставленными напоказ сиськами, «модные» люди и подростки пьют крепкий алкоголь из бутылок с газировкой, которые они пробрались внутрь. », — вспоминает она. «Мы должны были сделать это на автостоянке, но совет отказал в разрешении после просмотра группы на YouTube.Я понимаю, почему люди останавливались, чтобы посмотреть в окна. Там была эта пожилая пара, наблюдающая без всякого выражения. Это не то, что вы ожидаете увидеть на бульваре Норт-Робертсон в Западном Голливуде».

Новый EP Girl Pusher выйдет весной

Габби носит большой блейзер Luar, нейлоновый спортивный костюм, надетый под Marcelo Burlon County of Milan, все остальные аксессуары принадлежат ей, Джаррод носит хлопковый комбинезон.

Самолет Curtiss-Wright XP-55 со стреловидным крылом опередил свое время.

«Нестандартное мышление» — крылатая фраза, возможно, слишком часто слышимая сегодня, но в 1939 году она еще не вошла в широкое употребление. Тем не менее, концепция существовала, примером чего является предложение майора авиакорпуса армии США Эдварда М. Пауэрса от 27 ноября 1939 г. относительно нового усовершенствованного истребителя, который превосходил бы любой существующий самолет по скорости, скороподъемности, маневренности, вооружению и вооружению. видимость пилота. Стоимость должна была быть низкой, как и техническое обслуживание, и в предложении прямо указывалось, что будут рассмотрены нетрадиционные конструкции.

Curtiss-Wright ответила одним из самых странных самолетов, когда-либо появлявшихся на чертежных досках. Под руководством уважаемого конструктора Донована Берлина инженеры компании спроектировали CW-24, стреловидный толкатель с рулем высоты в носовой части и стабилизаторами и рулями направления у законцовок крыла. Самолет также опередил свое время благодаря трехопорному шасси. Его силовая установка будет столь же радикальной — пока еще несовершенный Pratt & Whitney X-1800. Этот Н-образный двигатель с 28 цилиндрами в четыре ряда (рабочий объем 2599 кубических дюймов) мощностью 2000 л.с. должен был разгонять самолет до скорости более 500 миль в час.

Хотя самолет Vultee XP-54 «Swoose Goose» выиграл конкурс, компания Curtiss-Wright была достаточно уверена в его конструкции, чтобы профинансировать создание полномасштабной летающей модели из сварных стальных труб, деревянных крыльев и тканевой обшивки, оснащенной двигателем Menasco мощностью 275 л.с. двигатель. Испытанный на полигоне Muroc Bombing Range (теперь база ВВС Эдвардс) в Калифорнии, самолет показал себя хорошо, хотя из-за используемого двигателя он достиг скорости только 180 миль в час. Из-за некоторых проблем со стабильностью законцовки крыла были впоследствии увеличены и перемещены на четыре фута дальше по крылу, а к фюзеляжу были добавлены спинной и подфюзеляжный стабилизаторы.

Был заключен контракт USAAF на производство трех прототипов, новый самолет получил обозначение XP-55 Ascender. Из-за проблем с разработкой двигателя X-1800 все три Ascender были оснащены двигателями Allison 1710 V-12 мощностью 1275 л.с. каждый. Первый самолет (42-78845) совершил свой первый полет 19 июля 1943 г., но был потерян 15 ноября 1943 г. во время пробного полета с летчиком-испытателем Харви Греем за штурвалом. V-образный самолет закинул хвост на нос и вошел в перевернутый неуправляемый вертикальный спуск, упав на 16 000 футов, прежде чем пилот выпрыгнул.Второй XP-55 (42-78846) уже близился к завершению, когда произошел этот несчастный случай, поэтому можно было легко сделать несколько модификаций, но его руль высоты был увеличен, а система выступов изменена. Точно так же балансировочные язычки на элеронах были заменены на пружинные язычки. Этот самолет летал только в ограниченных условиях, чтобы избежать зоны сваливания.

Третий прототип (42-78847) имел четыре пулемета калибра .50, установленных в носовой части. Его длина крыла была увеличена, а также был увеличен предел хода руля высоты, чтобы уменьшить его склонность к остановке.Однако это оказалось контрпродуктивным, поскольку перемещение было настолько большим, что пилот мог фактически застопорить самолет при взлете. Руль высоты был переделан, но самолет, по-видимому, по-прежнему мог глохнуть без предупреждения. Добавлено механическое устройство предупреждения о сваливании. Хотя 42-78847 выдержал программу испытаний, он разбился во время авиашоу в Райт-Филд, штат Огайо, 27 мая 1945 года, в результате чего погиб пилот, а также водитель и четыре пассажира автомобиля.

Средний прототип (42-78846) в конечном итоге претерпел аналогичные модификации по мере продолжения испытаний.Но из-за отсутствия двигателя X-1800 и продолжающихся проблем со стабильностью XP-55 никогда не соответствовал ожидаемым характеристикам. В то же время начали появляться реактивные самолеты, и казалось вероятным, что они станут следующим поколением боевых самолетов. В 1944 году от проекта ХР-55 отказались. В то время как название «Ассендер» подразумевало способность самолета быстро набирать высоту, инженер проекта Э. М. «Бад» Флеш позже утверждал, что этим названием он надул бюрократов.Он иронично заметил, что акцент на первом слоге имени, а не на среднем, приведет к совершенно другому коннотации!

Что случилось со вторым прототипом? Последний из Ascender был доставлен в Уорнер Робинс Филд, штат Джорджия, в мае 1945 года. Впоследствии он был доставлен во Фриман Филд, штат Индиана, в ожидании передачи в Национальный музей авиации (ныне Национальный музей авиации и космонавтики). В июле 1946 года он был отправлен в Парк-Ридж, штат Иллинойс, и, наконец, в учреждение Пола Гарбера в Суитленде, штат Мэриленд., где он оставался более полувека. В декабре 2001 года его доставили в Музей истории авиации Каламазу на юго-западе Мичигана. Филиал Смитсоновского института, «Воздушный зоопарк» уже имел несколько исторических самолетов. Смитсоновский институт очень требователен к тому, как следует проводить реставрацию своих артефактов, и реставраторы Воздушного зоопарка постарались буквально следовать этим правилам в своей работе над «Асцендером».

В отличие от большинства самолетов, восстановленных Воздушным Зоопарком, XP-55 прибыл «удивительно целым», по словам менеджера проекта Рика Джонсона.Учитывая, что двумя предыдущими реставрациями музея были грузовой планер Waco CG-4A, который был найден ржавеющим в сосновом лесу на верхнем полуострове Мичигана, и Douglas SBD Dauntless, который простоял на дне озера Мичиган в течение 50 лет, становится понятным, что команда была в восторге от того, что работает над самолетом, в котором практически «все готово». Фактически, когда они начали снимать панели доступа, мужчины обнаружили, что внутренние компоненты не были изъедены ржавчиной. Они также обнаружили нарисованные карандашом инженерные линии и маркировку — даже заметки, оставленные техниками для себя о том, что они сделали с самолетом.

Сначала на повестке дня стояла хорошая очистка некоторых компонентов раствором Ivory Soap. Куратор самолета Алан Кларк начал работу над верхним и нижним воздухозаборниками и оперением. Сделанные вручную из бальзы, они начали гнить. Кларк, сам скульптор, сумел отремонтировать узлы до такой степени, что потребовалось очень внимательное изучение, чтобы понять, что они не на 100 процентов оригинальны. Механик планера и силовой установки Дэйв Андерсон начал разборку, чистку и сборку шасси.Пока это происходило, Рик Джонсон, Грег Уорд и несколько добровольцев начали трудный процесс документирования бесчисленных отметин на крыльях и фюзеляже. Весь самолет был задрапирован прозрачным винилом, на нем было прочерчено положение каждого трафарета, знаков отличия и логотипа, что, по сути, составляло план маркировки в натуральную величину. Были сделаны цифровые фотографии всего и каталогизированы, чтобы, когда придет время повторно наносить маркировку, они выглядели и располагались точно в тех же местах, что и оригиналы.

После того, как вся документация была завершена, мужчины начали вручную удалять первоначальную отделку, стараясь не повредить и не испортить основной металл. Хотя было бы неплохо — и исторически более точно — сохранить первоначальную отделку самолета, это было просто невозможно. Почти 60 лет воздействия стихии оставили отделку далеко не в первозданном состоянии. Более того, исходный наполнитель кожного покрова сохранил влагу и продолжил уже начавшийся коррозионный процесс.На голую обшивку крыльев был нанесен самопротравливающий праймер под названием Vari-Prime, сцепляющийся с металлом, чтобы остановить коррозию. Наполнитель, который не удерживал влагу, был затем использован для выравнивания поверхностей и мокрой шлифовки вручную. После нескольких применений наполнителя с последующим шлифованием в результате получилась почти идеально гладкая кожа. Затем был нанесен эпоксидный грунт с последующей шлифовкой и финишным слоем матовой акриловой эмали на крыльях — сверху оливково-серый, снизу светло-серый.Затем были нанесены все разметки и трафареты. Сотрудники Curtiss, очевидно, не наносили самолет по трафарету, что было обычным делом в то время, а вместо этого использовали какой-то метод шелкографии. Аналогичный процесс использовался для нанесения новых трафаретов.

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

Первоначально сотрудники музея планировали полностью разобрать двигатель Allison XP-55, но, взглянув на него, поняли, что придется перерезать несколько шлангов и проводов, нарушив целостность исходной установки. Используя бороскоп, Кларк, Андерсон и Дик Шаус осмотрели внутреннюю часть двигателя и определили, что коррозии не произошло. Поэтому с благословения Смитсоновского института они принудительно накачали двигатель маслом (все движущиеся части двигались свободно), а затем хорошо почистили двигатель снаружи.Мыльный раствор будет использоваться для очистки салона кабины, и единственное внимание, которое нужно уделить фонарю, — это небольшая подкраска, а также замена оригинальных оконных стекол из плексигласа, которые треснули. Когда сборка будет завершена — вероятно, в течение примерно 18 месяцев — XP-55 будет выставлена ​​на обозрение в Образовательном центре Air Zoo. XP-55 Ascender должен быть одним из самых редких и необычных существующих самолетов, и сотрудники Kalamazoo Air Zoo гордятся тем, что восстанавливают его для потомков. Он присоединится к более чем 80 другим самолетам в выставочных залах авиационного зоопарка, расположенного по адресу 3101 E.Милхэм-роуд, Каламазу, Мичиган 49002-1700, 269-382-6555. Или посетите www.airzoo.org.

 

Впервые эта функция появилась в выпуске Aviation History за май 2004 г. . Подпишитесь сегодня!

Разработка редактора для совместной работы в режиме реального времени с помощью Pusher

TL;DR: В этой статье вы узнаете, как создать приложение для редактирования заметок для совместной работы в режиме реального времени, которое позволяет нескольким пользователям одновременно работать над одним и тем же документом.Для создания этого приложения вы будете использовать такие инструменты, как Node.js, Express, Pusher и Auth0. При необходимости вы можете найти код финального приложения в этом репозитории GitHub.

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

Твитнуть это

Что вы построите?

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

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

  • Node.js: механизм выполнения на базе процессора Chrome V8, который позволяет вам использовать язык программирования JavaScript на вашем компьютере и на серверах (т. е. вне веб-браузеры).
  • Express: быстрый и минималистичный веб-фреймворк для Node.js.
  • Pusher: размещенная служба, помогающая создавать приложения реального времени с меньшим объемом кода.
  • Auth0: универсальная платформа аутентификации и авторизации для веб-приложений, мобильных и устаревших приложений.

Придется ли вам платить за эти услуги и инструменты? Нет, ты не будешь. Node.js и Express — это проекты с открытым исходным кодом, которые вы можете использовать бесплатно для создания всего, что захотите. У Pusher и Auth0 есть платные уровни, на которых вы можете использовать расширенные функции для создания более качественных приложений, но они также включают несколько интересных бесплатных уровней.Вы сможете создавать удивительные приложения в кратчайшие сроки с помощью этих сервисов, не платя ни копейки в течение длительного времени. Если только ваше приложение не станет слишком популярным, но это вряд ли проблема, верно?

Предварительные требования

Чтобы следовать этой статье, вам потребуются базовые знания JavaScript и связанных с ним технологий, таких как HTML и CSS. Также вам нужно будет установить на свой компьютер Node.js и NPM. Если у вас его нет, вы можете перейти на официальную страницу загрузки Node.js и следовать приведенным там инструкциям.NPM входит в состав Node.js.

После установки Node.js и NPM откройте терминал и выполните следующие команды, чтобы убедиться, что все настроено:

  node -v


нпм -в
  

Что такое толкатель?

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

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

Формирование вашего проекта

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

 
mkdir совместный редактор в реальном времени


cd Collaborative-Real-Time-Editor  

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

  + активы.
 - app.js
 - основной.css
+ просмотры
 - редактор.мопс
 - index.pug
 - layout.pug
+ пакет.json
+ сервер.js
+ variable.env  

Каталог assets будет содержать все ваши таблицы стилей (правила CSS) и интерфейсный код JavaScript. Каталог views будет содержать все ваши интерфейсные представления (HTML-код). Файл server.js будет содержать серверный код для запуска вашего приложения.Файл variable.env будет содержать некоторые глобальные переменные среды (некоторые ключи, которые вам понадобятся для запуска вашего приложения). А файлы .pug — это ваши файлы HTML. По мере продвижения вы увидите, как эти файлы вписываются в ваше приложение.

Примечание: Если вы не знаете, зачем собираетесь использовать файлы .pug , не волнуйтесь. Pug — это механизм шаблонов для Node.js, облегчающий процесс написания HTML-файлов. Как вы увидите, использовать Pug очень просто.

Затем вы можете использовать NPM для инициализации вашего каталога как проекта Node.js, выполнив:

 
npm init -y  

Установка зависимостей

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

  npm install body-parser dotenv express express-session Passport-auth0 pug textsync-server-node  

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

  1. Вы будете использовать пакеты паспорт и паспорт-auth0 для реализации аутентификации пользователя с помощью Auth0.
  2. Вы будете использовать textsync-server-node для обработки авторизации Pusher TextSync.
  3. Вы будете использовать dotenv для загрузки переменных среды из файла variable.env в объект Node.js process.env .
  4. Вы будете использовать pug для своих серверных шаблонов.

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

Настройка учетной записи TextSync для Pusher

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

После регистрации вы можете перейти в раздел TextSync своей новой учетной записи Pusher и нажать кнопку Создать . Нажатие этой кнопки заставит Pusher показать диалоговое окно, в котором он попросит вас ввести имя для вашего нового экземпляра TextSync. В этом диалоговом окне вы можете ввести что-то вроде «Совместный редактор в реальном времени» и нажать кнопку «Создать ».

Pusher создаст для вас новый экземпляр менее чем за секунду и после этого перенаправит вас на страницу, где будут показаны некоторые инструкции о том, как вы можете использовать этот экземпляр. Хотя эти инструкции полезны, прямо сейчас они вам не интересны. Что вас интересует, так это поле под названием Credentials на этой странице. В этом ящике будет два ключа, которые вам скоро придется использовать: Instance Locator и Secret Key .Итак, прежде чем вернуться к своему коду, найдите это поле и оставьте страницу открытой.

Настройка представлений с помощью Pug

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

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

  doctype html
html (язык = "en")
  голова
    мета(кодировка="UTF-8")
    meta(name="viewport" content="width=device-width, initial-scale=1.0")
    мета(http-equiv="X-UA-Compatible" content="ie=edge")
    ссылка(rel="stylesheet" href="/main.css")
    title Редактор реального времени
  body.main
    block content  

Так выглядит файл Pug. Если это недостаточно ясно, вот лучшее объяснение того, что Pug делает с этим файлом.

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

  1. преобразует doctype html в элемент ;
  2. преобразовать html(lang="en") в ;
  3. преобразовать head в и, поскольку он имеет отступ ниже html , он будет добавлен в ;
  4. преобразовать каждый дочерний элемент head (т.е., мета , ссылка , заголовок ) и добавить в него;
  5. и преобразовать body.main в и вставить внутрь .

Ну, вы поняли, верно? Во всяком случае, чтобы лучше проиллюстрировать, вот вывод файла выше:

  

<голова>
    <мета-кодировка="UTF-8">
    
    
    
    Редактор в реальном времени

<тело>
  

Очень просто, не так ли? Но ждать! Как насчет содержимого блока . Что ж, это тоже легко, это заполнитель для реального контента. Этот заполнитель называется Template Inheritance от Pug. По их собственным словам:

Мопс поддерживает наследование шаблонов.Наследование шаблонов работает через блок и расширяет ключевые слова . В шаблоне блок — это просто «блок» Pug, который может заменить дочерний шаблон. — Наследование шаблона Pug

Создание представлений Pug

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

  extends layout

блокировать содержимое
  nav.login_nav
    button.login_button= user.displayName
  форма (действие = "/ примечание" метод = "POST")
    input(type="text" name="title" placeholder="НАЗВАНИЕ НОВОЙ ЗАМЕТКИ")
    ввод (тип = «скрытое» имя = «слаг»)
    кнопка (класс = "create_note") СОЗДАТЬ
  
  сценарий.
    var slug = Math.random().toString(36).slice(2);
    document.querySelector('input[name="slug"]').value = slug  

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

Что важно в файле index.pug , так это то, что он содержит переменную с именем slug , которая содержит случайную буквенно-цифровую строку. При отправке формы, созданной этим представлением, на сервер отправляется слаг . Затем на своем сервере вы будете использовать его для создания уникальной ссылки (URL), на которую будут ссылаться другие пользователи, присоединяясь к текущему сеансу.Это может быть не очень ясно сейчас, но достаточно скоро вы поймете эту идею.

Как видите, целью файла index.pug является создание представления, в котором пользователи могут начинать новые сеансы редактирования (чтобы они могли поделиться со своими друзьями). Теперь вам нужно создать представление, которое будет отображать сам редактор. Таким образом, создайте новый файл с именем editor.pug внутри каталога views и вставьте в него следующий код:

  extends layout

блокировать содержимое
  .боковая панель
    h4 Соавторы
    .active_users
      ул
  .основное содержание
    #Текстовый редактор
  сценарий (тип = "текст/javascript").
    var user = "#{user.displayName}";
  сценарий (тип = «текст/javascript» src = «https://static.pusherplatform.com/textsync/us1/textsync.js»)
  script(type="text/javascript" src="/app.js")  

В этом случае вы определяете, что файл editor.pug будет использовать два скрипта:

  1. textsync.js : Файл JavaScript, предоставленный Pusher, чтобы вы могли легко использовать его функцию TextSync.
  2. app.js : файл, который вы вскоре создадите для управления логикой этого представления.

Помимо этих скриптов, ваше новое представление определяет два раздела:

  1. Элемент div с боковой панелью Класс : Здесь пользователи увидят, кто еще с ними в сети.
  2. Элемент div с классом main_content : сюда вы добавите редактор (т. е. в элемент #text_editor ).

Наконец, ваше представление определяет библиотеку JavaScript с именем user , которая получит имя вошедшего в систему пользователя ( user.displayName ). Во время работы над кодом сервера вы заполните заполнитель #{user.displayName} именем пользователя, возвращенным Auth0.

Имея этот файл, вы можете создать файл, который будет содержать правила CSS для оформления вашего приложения. Итак, создайте файл с именем main.css внутри нового каталога с именем assets (создайте его в корне проекта вместе с представлениями ) и вставьте в него этот код:

  * {
  box-sizing: граница-коробка;
  маржа: 0;
  заполнение: 0;
  семейство шрифтов: без засечек;
  вес шрифта: 300;
  размер шрифта: .95 бэр
}

h4 {
  размер шрифта: 1.5rem;
  белый цвет;
  выравнивание текста: по центру;
  нижняя граница: 3px;
}

навигация {
  высота:8вх;
  flex-основа: 100%;
  фон: линейный градиент (325 градусов, RGB (39, 107, 130) 0px, RGB (49, 84, 129) 100%);
}

кнопка {
  курсор: указатель;
  радиус границы: 5px;
  белый цвет;
}

форма {
  дисплей: гибкий;
  поле: 20 пикселей;
  отступ: 20 пикселей;
  выравнивание содержимого: по центру;
  flex-основа: 100%;
}

форма ввода {
  ширина: 50%;
  ширина границы: 0 0 1px 0;
  отступ: 10 пикселей;
  цвет границы: rgb(39, 107, 130);
  поле справа: 20px;
}

.главный {
  дисплей: гибкий;
  гибкая упаковка: упаковка;
}

.сайдбар {
  дисплей: гибкий;
  flex-направление: столбец;
  отступ: 10 пикселей;
  flex-основа: 17%;
  высота: 100вх;
  выровнять содержимое: по центру;
  фон: линейный градиент (325 градусов, RGB (39, 107, 130) 0px, RGB (49, 84, 129) 100%);
}

.active_users ли {
  тип стиля списка: нет;
  фон: белый;
  радиус границы: 5px;
  отступ: 10 пикселей;
  поле: 10 пикселей;
}

.основное содержание {
  отступ: 30 пикселей;
  flex-база: 83%;
  дисплей: гибкий;
  выравнивание содержимого: по центру;
  flex-wrap: обернуть;
}

#Текстовый редактор {
  поля: 10px 0 40px 0;
  высота: 80вх;
  flex-основа: 100%;
}

.логин_нав {
  дисплей: гибкий;
  выровнять содержание: центр;
}

.login_button {
  ширина: 6рем;
  высота:2рем;
  граница: 1px;
  фон: красный;
  выровнять себя: по центру;
}

.create_note {
  ширина: 6рем;
  граница: 1px сплошной белый;
  фон: линейный градиент (325 градусов, RGB (39, 107, 130) 0px, RGB (49, 84, 129) 100%);
}  

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

Интеграция вашего приложения с TextSync

Чтобы интегрировать ваше представление с TextSync, вы создадите файл с именем app.js внутри каталога assets и добавьте этот код:

  const textSyncInstance = new TextSync({
  instanceLocator: "ВАШ ИНСТАНЦИОННЫЙ ЛОКАТОР ПУШЕРА"
});


постоянный редактор = textSyncInstance.createEditor({
  docId: document.URL.slice(document.URL.lastIndexOf("/") + 1),
  элемент: "#text_editor",
  authEndpoint: "http://localhost:3000/textsync/токены",
  имя пользователя: пользователь,
  курсорLabelsAlwaysOn: правда,

  onCollaboratorsJoined: пользователи => {
    const activeUsers = документ.querySelector(".активные_пользователиул");
    users.forEach(значение => {
      activeUsers.insertAdjacentHTML(
        "до конца",
        `
  • ${value.name}
  • ` ); }); }, onCollaboratorsLeft: пользователи => { const activeUsers = document.querySelectorAll(".active_users ul li"); users.forEach(значение => { activeUsers.forEach (элемент => { если (element.id === value.siteId) element.remove(); }); }); } });

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

    Как видно из файла выше, вы вызываете textSyncInstance.createEditor для создания редактора для совместной работы в реальном времени. Кроме того, есть несколько других вещей, которые вы передаете этой функции, о которых вам следует знать:

    • docId : это идентификатор документа, который будет загружен в редактор при создании.Ранее вы создали слаг , который использовали для создания уникального URL-адреса. Функция document.URL.slice(document.URL.lastIndexOf("/") + 1) получает часть URL-адреса после последней косой черты (например, из URL-адреса localhost:3000/note/yajdzfr2w78 , это извлекает yajdzfr2w78 ) и загружается как docId в редактор при создании. Это важно, потому что docId позволяет другим пользователям присоединяться к тому же сеансу редактирования. По сути, все редакторы TextSync с одинаковым идентификатором docId принадлежат к одному и тому же сеансу редактирования.

    • элемент : это элемент DOM, который будет содержать текстовый редактор. Это может быть либо селектор CSS, либо ссылка на объект элемента.

    • authEndpoint : это URL-адрес конечной точки на вашем сервере, где библиотека TextSync может получить токены авторизации. Позже вы увидите, как именно это работает.

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

    • userName : Имя текущего пользователя, которое будет отображаться для других соавторов, работающих в том же сеансе редактирования.

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

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

    Более широкий список свойств конфигурации см. в официальной документации TextSync.

    Реализация вашего экспресс-приложения

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

      INSTANCE_LOCATOR=<ВАШ_INSTANCE_LOCATOR>
    KEY=  

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

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

    Во-первых, ваш файл будет импортировать пакеты, которые вы установили ранее, и создаст сервер Express:

      const path = require('path');
    
    const bodyParser = require('body-parser');
    константный экспресс = требуется ('экспресс');
    const session = require('express-session');
    const паспорт = требовать('паспорт');
    const Auth0Strategy = require('passport-auth0');
    const TextSync = require('textsync-server-node');
    
    
    требуют('дотенв').config({ путь: 'variables.env' });
    
    константное приложение = экспресс();
    app.set('движок просмотра', 'мопс');  

    Обратите внимание, как после запроса всех установленных библиотек вы заставляете Node.js загружать свойства из файла variable.env . Вы скоро будете использовать эти переменные. Кроме того, обратите внимание, что вы заставляете свой экземпляр Express (т. Е. Приложение ) использовать (или понимать) механизм просмотра Pug. Имея это на месте, вы делаете приложение Express способным обслуживать представления Pug.

    Теперь вы заставите свое приложение Express использовать промежуточное ПО:

     
    
    
    приложение.использовать((запрос, разрешение, следующий) => {
      res.header('Access-Control-Allow-Origin', '*');
      res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
      следующий();
    });
    
    
    app.use(express.static(path.join(__dirname, 'assets')));
    app.use(bodyParser.urlencoded({extended: false}));
    app.use(bodyParser.json());
    
    
    app.use (сеанс ({
      секрет: '--ENTER CUSTOM SESSION SECRET--',
      пересохранить: ложь,
      saveUninitialized: ложь
    }));  

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

    1. express.static : это промежуточное программное обеспечение позволяет вашему приложению Express обслуживать файлы в каталоге assets как статические файлы (т. е. ваше приложение Express просто возвращает их значения). без каких-либо изменений по запросу).
    2. bodyParser.urlencoded : Это заставляет ваше приложение Express анализировать urlencoded тел.
    3. bodyParser.json : Это заставляет ваше приложение Express анализировать тела JSON.
    4. session : это промежуточное ПО позволяет вашему приложению Express предоставлять сеанс вашим пользователям (для готового к производству приложения вам нужно будет изменить значение, переданное на secret ).

    После настройки этого файла вы добавите несколько маршрутов на свой сервер:

     
    
    функция loggedIn(req, res, next) {
      req.session.user ? следующий() : res.redirect('/логин');
    }
    
    app.get('/', loggedIn, (req, res) => {
      res.render('index', {пользователь: req.session.user})
    });
    
    приложение.post('/note', loggedIn, (req, res) => {
      const slug = req.body.slug;
      res.redirect(`/note/${slug}`);
    });
    
    app.get('/note/:slug', loggedIn, (req, res) => {
      res.render('редактор', {пользователь: req.session.user})
    });  

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

    1. / : этот маршрут заставляет ваш сервер отображать индекс .pug ( res.render('index', ...) ) с вошедшим в систему пользователем ( req.session.user ). Как вы помните, файл index.pug представляет собой представление, отображающее форму, чтобы пользователи могли создавать новые сеансы редактирования.
    2. /note : при отправке формы в index.pug на этот маршрут делается запрос POST, который отправляет слаг . Этот маршрут извлекает это значение из req.body.slug и использует его для создания нового уникального маршрута.Затем пользователь перенаправляется на этот новый маршрут.
    3. /note/:slug : Это созданный новый маршрут, а также место, где происходит сотрудничество. :slug в этом маршруте представляет уникальный слаг, определенный ранее. Этот маршрут уникален для каждого сеанса редактирования, и любой, кого приглашают присоединиться к конкретному сеансу, делает это через этот маршрут.

    Авторизация пользователя TextSync

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

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

    Имея это в виду, вам нужно реализовать на вашем сервере Express конечную точку, которая будет решать, разрешено ли пользователям присоединяться к сеансу. Для этого добавьте следующий код в конец файла server.js :

     .
    
    константа textSync = новая TextSync({
      instanceLocator: process.env.INSTANCE_LOCATOR,
      ключ: процесс.env.KEY
    });
      
    app.post('/textsync/tokens', (req, res) => {
      
      
      постоянные разрешенияFn = () => {
        вернуть обещание.разрешить([
          TextSync.Permissions.READ,
          TextSync.Permissions.WRITE
        ]);
      };
    
      
      const options = {tokenExpiry: 60 * 20};
    
      textSync.authorizeDocument (req.body, разрешения Fn, параметры)
        .затем (токен => {
          res.json (токен);
        });
    });  

    Как видите, первое изменение, которое вы сделали на своем сервере, связано с созданием объекта textSync с вашими ключами среды. Это объект, который вы будете использовать для связи с экземпляром TextSync в Pusher.После этого вы определили конечную точку /textsync/tokens , чтобы ваше внешнее приложение могло отправлять запросы POST, как было настроено ранее.

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

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

    Обработка аутентификации

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

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

    Настройка учетной записи Auth0

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

    1. Имя вашего приложения: Здесь вы можете добавить любое описательное имя. Например: «Совместный редактор в реальном времени».
    2. Тип приложения : Для этого вам нужно будет выбрать Обычные веб-приложения .

    Сообщив эти значения Auth0, вы можете нажать кнопку Create . Нажав на нее, Auth0 перенаправит вас в раздел Quick Start вашего нового приложения.Оттуда вы можете перейти на вкладку Настройки , где вы настроите свое приложение.

    Теперь, когда вы находитесь на вкладке Настройки , найдите поле под названием Разрешенные URL-адреса обратного вызова . В этом поле добавьте http://localhost:3000/callback . Если вам интересно, это поле добавляет дополнительный уровень безопасности, сообщая Auth0, что единственный URL-адрес, разрешенный для обратного вызова после аутентификации, — это те, которые вы там вводите. Когда вы публикуете свое приложение для всего мира, вам придется перейти с localhost на ваш общедоступный домен.Но это не тот случай.

    Затем, после добавления этого URL-адреса в указанное поле, вы можете нажать кнопку Сохранить изменения . После этого откройте файл variable.env и обновите его следующим образом:

      AUTH0_CLIENT_ID=
    AUTH0_DOMAIN=<ВАШ-ДОМЕН>
    AUTH0_CLIENT_SECRET=  

    Примечание: Вам придется заменить , и 9-13009 со значениями, которые Auth0 показывает для созданного вами приложения.То есть вам придется заменить эти заполнители на Client ID , Domain и Client Secret соответственно.

    Настройка Auth0 в вашем коде

    Чтобы интегрировать внутренний сервер с Auth, вы будете использовать Passport.js и библиотеку passport-auth0 . Поскольку вы уже установили оба, вы можете сосредоточиться на коде. Итак, в файл server.js добавьте следующий код:

     
    
    
    app.use(passport.initialize());
    
    
    приложение.использовать (паспорт.сессия());
    
    
    паспорт.serializeUser((пользователь, готово) => {
      сделано (ноль, пользователь);
    });
    
    
    паспорт.deserializeUser((пользователь, готово) => {
      сделано (ноль, пользователь);
    });
    
    
    паспорт.использовать(новый Auth0Strategy({
      домен: процесс.env.AUTH0_DOMAIN,
      идентификатор клиента: process.env.AUTH0_CLIENT_ID,
      clientSecret: процесс.env.AUTH0_CLIENT_SECRET,
      callbackURL: 'http://localhost:3000/callback'
    }, (accessToken, refreshToken, extraParams, profile, done) => {
    
      вернуть готово (ноль, профиль);
    }));
    
    app.get('/логин', паспорт.аутентифицировать('auth0', {
      
      область: 'профиль openid',
    }));
    
    app.get('/callback',passport.authenticate('auth0'), (req, res) => {
      req.session.user = req.user;
      res.redirect('/');
    });
    
    
    app.listen(process.env.PORT || 3000, () => {
      console.log("Сервер прослушивает порт 3000.");
    });  

    Как видно из комментариев, первые две строки настраивают промежуточное ПО паспорта в вашем приложении . После этого вы определяете две функции для сериализации и десериализации пользовательских экземпляров в сеанс и из сеанса.Затем вы настраиваете Auth0 и Passport вместе, вызывая Auth0Strategy и передавая ему свои переменные среды. После этого вы добавите две новые конечные точки:

    1. /login : когда пользователи попадут в эту конечную точку, ваш сервер перенаправит их на страницу входа Auth0, чтобы они могли войти в систему.
    2. /callback : после эти пользователи аутентифицируются на Auth0, они перенаправляются на эту конечную точку (т. е. на http://localhost:3000/callback ).Итак, в этой конечной точке вы завершаете интеграцию с Auth0, передавая запрос через Passport ( Passport.authenticate ) и устанавливая сеанс пользователя ( req.session.user ).

    Наконец, вы запускаете свой сервер Express, заставляя его прослушивать порт 3000 .

    Тестирование нашего приложения

    Вот и все. С этими последними изменениями в server.js ваше приложение готово к работе в прайм-тайм. Итак, вернитесь в свой терминал и введите следующую команду:

      node server  

    Затем откройте http://localhost:3000/ в веб-браузере.Там вы увидите, что вас перенаправили на Auth0, чтобы вы могли войти в систему, и после входа вы увидите экран, на котором вы можете начать сеанс редактирования.

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

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

    "Я только что создал веб-редактор для совместной работы в режиме реального времени. Такой классный и такой простой!"

    Tweet This

    Заключение

    В этой статье вы узнали, как создать совместный редактор в реальном времени, в котором разные пользователи могут одновременно работать над одним и тем же документом. Для этого вы использовали такие инструменты, как Node.js, Express, Pusher и Auth0. Хотя пример прост и не сохраняет отредактированное содержимое в базах данных, его было достаточно, чтобы дать вам довольно прочную основу для создания готовых к эксплуатации и безопасных приложений с возможностями работы в реальном времени.

    Что вы думаете? Вам понравилось использовать эти инструменты? Дайте мне знать в поле для комментариев ниже!

    Время жизни IP (TTL) и основные сведения об ограничении переходов

    Чтобы обеспечить ограниченное время жизни IP-пакетов в сети, все IP-пакеты имеют 8-битное поле заголовка Time to Live (IPv4) или Hop Limit (IPv6) и значение, которое определяет максимальное количество переходов на третьем уровне (обычно маршрутизаторы), которые можно пройти на пути к месту назначения. Каждый раз, когда пакет прибывает на сетевое устройство третьего уровня (переход), значение уменьшается на единицу, прежде чем он будет направлен дальше.Когда значение в конечном итоге достигает единицы, пакет отбрасывается принимающим его устройством (поскольку значение будет уменьшено до нуля). Хотя это не предотвратит проблемы с сетью, вызванные петлей маршрутизации или чем-то подобным, но уменьшит их влияние и может помочь избежать сбоев маршрутизатора. Поскольку это 8-битное поле, максимально возможное значение равно 255 (11111111 в двоичном формате).

    В неожиданном случае, когда маршрутизатор получает пакет IPv6 с нулевым пределом переходов, и этот пакет не предназначен для самого маршрутизатора, он, как и следовало ожидать, отбрасывается.Если маршрутизатор (или любой хост IPv6) получает пакет IPv6 с пределом переходов, равным нулю или единице, и хост является получателем этого пакета (он не будет маршрутизироваться дальше), пакет будет принят. RFC IPv4 гораздо менее явный и просто указывает, что если это поле равно нулю, «датаграмма» должна быть уничтожена.

    В RFC для IPv4 указано, что TTL измеряется в секундах, но признается, что это несовершенная мера. Невозможно узнать, сколько времени потребуется тому или иному хосту для обработки пакета, и большинство из них сделает это гораздо меньше, чем за секунду.В любом случае, исходя из этой логики, теоретически максимальное время существования пакета в сети составляет 4,25 минуты (255 секунд). Следовательно, TTL описывается как «лимит времени самоуничтожения».

    Вот как выглядят поля Time to Live и Hop Limit в стандартном заголовке IPv4 и IPv6:

    При отбрасывании пакета с TTL или Hop Limit, равным единице или нулю, рассматриваемый маршрутизатор может (не обязательно) отправить источнику сообщение об ошибке ICMP следующего вида:

    • IPv4: тип 11: «Превышено время», код 0: «Превышено время жизни при передаче»
    • IPv6: тип 3: «Превышено время», код 0: «Превышен лимит переходов при передаче»

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

    Поле «Время жизни IPv4» и его функциональные возможности описаны в RFC 791 интернет-протокола: https://tools.ietf.org/html/rfc791. ICMPv4 указан в RFC 792: https://tools.ietf.org/html/rfc792 и расширен в RFC 4884 https://tools.ietf.org/html/rfc4884.

    Поле и функциональность поля IPv6 Hop Limit описаны в Спецификации Интернет-протокола версии 6 (IPv6), RFC 8200: https://tools.ietf.org/html/rfc8200. ICMPv6 указан в RFC 4443: https://tools.ietf.org/html/rfc4443 и расширен в RFC 4884 https://tools.ietf.org/html/rfc4884.

    Значения TTL и предела перехода по умолчанию

    Значения TTL и Hop Limit по умолчанию различаются в разных операционных системах, вот значения по умолчанию для некоторых:

    • Ядро Linux 2.4 (около 2001 г.): 255 для TCP, UDP и ICMP
    • Ядро Linux 4.10 (2015 г.): 64 для TCP, UDP и ICMP
    • Windows XP (2001 г.): 128 для TCP, UDP и ICMP
    • Windows 10 (2015): 128 для TCP, UDP и ICMP
    • Windows Server 2008: 128 для TCP, UDP и ICMP
    • Windows Server 2019 (2018): UDP и ICMP 128 128
    • MacOS (2001): 64 для TCP, UDP и ICMP

    тот хозяин.

    Трассировка

    Инструменты traceroute и Windows tracert для Linux (и другие) полагаются на поле TTL или Hop Limit для своей работы. Эти инструменты отправляют пакеты в пункт назначения, используя постоянно увеличивающийся TTL, начиная со значения, равного единице. При получении пакета с TTL, равным единице, маршрутизатор первого перехода (вероятно, шлюз по умолчанию для хоста-источника) уменьшит TTL на единицу, что приведет к нулевому значению. Это приведет к тому, что маршрутизатор отбросит пакет и отправит источнику сообщение об ошибке ICMP Time Exceeded (надеюсь).

    Затем пакеты отправляются с TTL, равным двум, и так далее, пока пакеты не дойдут до узла назначения. Сообщения об ошибках ICMP и исходные адреса хостов, которые их отправили, показывают, какие маршрутизаторы используются на пути доставки пакетов к месту назначения. Затем инструмент traceroute логически представляет эту информацию пользователю. Эти инструменты также выполняют обратный поиск DNS по исходному IP-адресу получаемых ими сообщений ICMP, чтобы помочь пользователю идентифицировать задействованные устройства.Большинство инструментов по умолчанию используют UDP и порт назначения из диапазона от 33434 до 33534 для тестовых пакетов с альтернативными параметрами ICMP (эхо-запрос) или TCP (SYN), которые можно указать при желании. Windows использует пакеты эхо-запросов ICMP. Для каждого используемого значения TTL по умолчанию обычно отправляются три пакета.

    Как упоминалось ранее, блокировка или ограничение скорости ICMP в сети или даже на хосте-отправителе могут мешать работе traceroute. Эта проблема усугубляется тем, что Window использует зонды ICMP.

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

    7 peer8-et-0-0-4.telehouse.ukcore.bt.net (109.159.252.158) 29,640 мс peer8-et-0-1-4.telehouse.ukcore.bt.net (109.159.252.106) 27,807 мс peer7 -et-4-1-1.telehouse.ukcore.bt.net (194.72.16.134) 36.241 мс
    8 195.99.126.135 (195.99.126.135) 32.526 мс 109.159.253.3 (109.159.253.3) 35.746 мс 109.159.253.235 (109.159.253.235) 38.4040

    7 peer8-et-0-0-4.telehouse.ukcore.bt.net (109.159.252.158)  29,640 мс peer8-et-0-1-4.telehouse.ukcore.bt.net (109.159.252.106)  27,807 ms peer7-et-4-1-1.telehouse.ukcore.bt.net (194.72.16.134) 36,241 мс
    8  195,99.126,135 (195,99.126,135)  32,526 мс 109.159.253,3 (109.159.253,3) 6 3 мс .159.253.235 (109.159.253.235)  38,440 мс

    Как отметил Джедадия Кейси в своем блоге здесь, в Packet Pushers: «При выполнении трассировки от устройств Cisco, которые по умолчанию отправляют три зонда на каждый переход, время ожидания второго зонда на последнем переходе обычно истекает. Это связано с ограничением скорости ICMP по умолчанию в Cisco IOS. Сообщения об ошибках, возвращаемые промежуточными маршрутизаторами, — «TTL Exceeded», тогда как сообщение, возвращаемое конечным пунктом назначения, — «Destination Unreachable».

    Как любезно указала Андреа Барберио в комментариях, существуют инструменты трассировки, способные работать с ECMP, такие как Dublin Traceroute и Paris Traceroute.

    Пинг

    Инструмент ping не следует использовать напрямую для подтверждения TTL или ограничения переходов вашего хоста. Выходные данные инструмента отображают TTL или предел перехода входящих IP-пакетов, используемых для доставки сообщений ICMP Echo Response, а не значение, используемое при отправке ICMP Echo Requests.

    Конечно, вы можете использовать tcpdump в сочетании с ping и следить за TTL или пределом переходов исходящих запросов.Такая команда и выражение фильтра будут работать для IPv4:

    .

    sudo tcpdump -vvnni любой 'icmp[icmptype] == 8'

    sudo tcpdump -vvnni любой 'icmp[icmptype] == 8'

    А это для IPv6:

    sudo tcpdump -vvnni любой 'icmp[icmptype] == 128'

    sudo tcpdump -vvnni любой 'icmp[icmptype] == 128'

    Изменение TTL в популярных операционных системах

    Linux — IPv4

    Вы можете отобразить текущую настройку следующим образом:

    системная сеть.ipv4.ip_default_ttl

    net.ipv4.ip_default_ttl = 64

    sysctl net.ipv4.ip_default_ttl

    net.ipv4.ip_default_ttl = 64

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

    sysctl -w net.ipv4.ip_default_ttl=128

    sysctl -w net.ipv4.ip_default_ttl=128

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

    • Отредактируйте файл /etc/sysctl.conf file
    • Создайте новый файл с расширением .conf в каталоге /etc/sysctl.d/
    • Отредактируйте существующий файл в каталоге /etc/sysctl.d/

    Какой бы путь вы ни выбрали выбрать, добавить это в файл, сохранить и выйти:

    net.ipv4.ip_default_ttl = 128

    net.ipv4.ip_default_ttl = 128

    Затем перезагрузите параметры ядра, используя следующую команду вместе с именем файла, в который вы добавили параметр:

    sysctl -p /etc/sysctl.конф

    sysctl -p /etc/sysctl.conf

    Кроме того, вы можете перезагрузить хост.

    Linux — IPv6

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

    sysctl net.ipv6.conf.all.hop_limit

    net.ipv6.conf.all.hop_limit = 64

    sysctl net.ipv6.conf.all.hop_limit

    net.ipv6.conf.all.hop_limit = 64

    Чтобы отобразить текущий параметр для определенного интерфейса (который может быть настроен со значением, отличным от значения по умолчанию), например:

    sysctl net.ipv6.conf.wlp3s0.hop_limit

    net.ipv6.conf.all.hop_limit = 64

    sysctl net.ipv6.conf.wlp3s0.hop_limit

    net.ipv6.conf.all.hop_limit = 64

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

    Linux – другие методы

    TTL и лимит переходов также можно настроить с помощью команды ip route и таблиц IP-адресов.

    Windows — IPv4

    Показать текущее значение с помощью административной командной строки, например:

    C:\WINDOWS\system32>netsh int ipv4 show global
    Запрос активного состояния...

    Общие глобальные параметры
    ---------------- -----------------------------
    Ограничение переходов по умолчанию                   : 128 прыжков
    ...

    C:\WINDOWS\system32>netsh int ipv4 show global
    Запрос активного состояния...

    Общие глобальные параметры
    -------------- ------------------------------
    Лимит переходов по умолчанию                   : 128 переходов
    ...

    Установите значение немедленно и навсегда, например:

    netsh int ipv4 set global defaultcurhoplimit=64

    netsh int ipv4 set global defaultcurhoplimit=64

    Windows — IPv6

    Показать текущее значение с помощью административной командной строки, например:

    C:\WINDOWS\system32>netsh int ipv6 show global
    Запрос активного состояния...

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

    C:\WINDOWS\system32>netsh int ipv6 show global
    Запрос активного состояния...

    Общие глобальные параметры
    -------------- ------------------------------
    Лимит переходов по умолчанию                   : 128 переходов

    Установите значение немедленно и навсегда, например:

    netsh int ipv6 set global defaultcurhoplimit=64

    netsh int ipv6 set global defaultcurhoplimit=64

    Windows — метод реестра IPv4

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

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    Имя: DefaultTTL
    Тип: REG_DWORD
    Основание: Десятичное
    Действительный диапазон: 1–255

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    Имя: DefaultTTL
    Тип: REG_DWORD
    Основа: Десятичный
    Действительный диапазон: 1–255

    Обратите внимание, что требуется перезагрузка.

    Подробнее о трассировке

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

    Трассировка UDP по умолчанию

    Мы начнем с рассмотрения пакетов, сгенерированных стандартной трассировкой к конфиденциальности, поддерживающей поисковый сайт StartPage. Во-первых, давайте запустим tcpdump и используем выражение фильтра, чтобы мы видели только исходящие DNS-запросы UDP, исходящие зонды UDP и входящие сообщения ICMP Time Exceeded: уже мы начнем с просмотра пакетов, сгенерированных стандартным сайтом поиска, поддерживающим трассировку к конфиденциальности. Стартовая страница.Во-первых, давайте запустим tcpdump и используем выражение фильтра, чтобы мы видели только исходящие запросы UDP DNS, исходящие зонды UDP и входящие сообщения ICMP Time Exceeded:

    .

    sudo tcpdump -Knnvvi any '(udp и dst порт 53) или (udp и dst portrange 33434-33534) или icmp[icmptype] == 11'

    sudo tcpdump -Knnvvi любой '(udp и dst порт 53) или (udp и dst portrange 33434-33534) или icmp[icmptype] == 11'

    Теперь запустим traceroute:

    Сначала мы увидим DNS-запросы IPv4 и IPv6 для стартовой страницы.com доменное имя (запросы отправляются локальному преобразователю systemd-resolve, работающему по петлевому адресу 127.0.0.53):

    IP (tos 0x0, ttl 64, id 11363, смещение 0, флаги [DF], proto UDP (17), длина 59)
       127.0.0.1.38232 > 127.0.0.53.53: 26663+ А? startpage.com. (31)

    IP (tos 0x0, ttl 64, id 7648, смещение 0, флаги [DF], proto UDP (17), длина 107)
       127.0.0.53.53 > 127.0.0.1.38232: 26663 вопрос: А? Стартовая страница.ком. 3/0/0 startpage.com. А 37.0.87.23, startpage.com. А 37.0.87.7, startpage.com. А 145.131.132.94 (79)

    IP (tos 0x0, ttl 64, id 11363, смещение 0, флаги [DF], proto UDP (17), длина 59)
       127.0.0.1.38232 > 127.0.0.53.53: 26663+ А? startpage.com. (31)

    IP (tos 0x0, ttl 64, id 7648, смещение 0, флаги [DF], proto UDP (17), длина 107)
       127.0.0.53.53 > 127.0.0.1.38232: 26663 в: А? startpage.com. 3/0/0 startpage.com. А 37.0.87.23, startpage.com. А 37.0.87.7, startpage.com. А 145.131.132.94 (79)

    Затем мы увидим пакеты зондов (я показал первый пакет из первых пяти наборов из трех зондов):

    IP (tos 0x0, ttl 1, id 59291, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.55220 > 37.0.87.23.33434: UDP, длина 32

    IP (tos 0x0, ttl 2, id 59294, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0,2.160,55236 > 37.0.87.23.33437: UDP, длина 32

    IP (tos 0x0, ttl 3, id 59297, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.50889 > 37.0.87.23.33440: UDP, длина 32

    IP (tos 0x0, ttl 4, id 59300, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.36143 > 37.0.87.23.33443: UDP, длина 32

    IP (tos 0x0, ttl 5, id 59303, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.36325 > 37.0.87.23.33446: UDP, длина 32

    IP (tos 0x0, ttl 1, id 59291, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.55220 > 37.0.87.23.33434: UDP, длина 32

    IP (tos 0x0, ttl 2, id 59294, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.55236 > 37.0.87.23.33437: UDP, длина 32

    IP (tos 0x0, ttl 3, id 59297, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.50889 > 37.0.87.23.33440: UDP, длина 32

    IP (tos 0x0, ttl 4, id 59300, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.36143 > 37.0.87.23.33443: UDP, длина 32

    IP (tos 0x0, ttl 5, id 59303, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.36325 > 37.0.87.23.33446: UDP, длина 32

    А вот как выглядит ошибка ICMP, связанная с первым показанным выше зондом:

    IP (tos 0xc0, ttl 64, id 38014, смещение 0, флаги [нет], proto ICMP (1), длина 88)
       10.0,2,1 > 10.0.2.160: превышено время ICMP в пути, длина 68
    IP (tos 0x0, ttl 1, id 59291, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.55220 > 37.0.87.23.33434: UDP, длина 32

    IP (tos 0xc0, ttl 64, id 38014, смещение 0, флаги [нет], proto ICMP (1), длина 88)
       10.0.2.1 > 10.0.2.160: превышено время ICMP в пути, длина 68
        IP (tos 0x0, ttl 1, идентификатор 59291, смещение 0, флаги [нет], proto UDP (17), длина 60)
       10.0.2.160.55220 > 37.0.87.23.33434: UDP, длина 32

    Обратите внимание, что сведения о пакете, вызвавшем отправку сообщения об ошибке, включены, а показанный TTL равен 1.

    Вот обратный DNS-запрос для хоста, отправившего сообщение Time Exceeded:

    IP (tos 0x0, ttl 64, id 54011, смещение 0, флаги [DF], proto UDP (17), длина 71)
       127.0.0.1.44927 > 127.0.0.53.53: 65236+ PTR? 160.2.0.10.в-адресарпа. (43)

    IP (tos 0x0, ttl 64, id 54011, смещение 0, флаги [DF], proto UDP (17), длина 71)
       127.0.0.1.44927 > 127.0.0.53.53: 65236+ PTR? 160.2.0.10.in-addr.arpa. (43)

    Трассировка ICMP

    Теперь давайте посмотрим, как все выглядит при использовании сообщений ICMP Echo Response (используется другой хост-источник). Вот модифицированная команда tcpdump и выражение фильтра: Не стесняйтесь пропустить этот раздел, он не требуется для экзамена. Теперь давайте посмотрим, как все выглядит с использованием сообщений ICMP Echo Response (используется другой хост-источник).Вот измененная команда tcpdump и выражение фильтра:

    sudo tcpdump -Knnvvi any '(udp и dst порт 53) или icmp[icmptype]=8 или icmp[icmptype] == 11'

    sudo tcpdump -Knnvvi any '(udp и dst порт 53) или icmp[icmptype]=8 или icmp[icmptype] == 11'

    И команда traceroute:

    traceroute --icmp startpage.com

    traceroute --начальная страница icmp.ком

    Вот некоторые из запросов ICMP:

    IP (tos 0x0, ttl 1, id 14423, смещение 0, флаги [нет], proto ICMP (1), длина 60)
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 1, длина 40

    IP (tos 0x0, ttl 2, идентификатор 14426, смещение 0, флаги [нет], прототип ICMP (1), длина 60 )
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 4, длина 40

    IP (tos 0x0, ttl 3, идентификатор 14429, смещение 0, флаги [нет], прототип ICMP (1), длина 60 )
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 7, длина 40

    IP (tos 0x0, ttl 1, id 14423, смещение 0, флаги [нет], proto ICMP (1), длина 60)
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 1, длина 40

    IP (tos 0x0, ttl 2, идентификатор 14426, смещение 0, флаги [нет], прототип ICMP (1), длина 60 )
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 4, длина 40

    IP (tos 0x0, ttl 3, идентификатор 14429, смещение 0, флаги [нет], прототип ICMP (1), длина 60 )
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 7, длина 40

    И сообщение ICMP Time Exceeded с подробной информацией об исходящем зондирующем сообщении ICMP:

    19:04:49.973098 IP (tos 0xc0, ttl 64, id 29383, смещение 0, флаги [нет], proto ICMP (1), длина 88)
       10.11.12.254 > 10.11.12.176: превышено время ICMP в пути, длина 68
    IP (tos 0x0, ttl 1, id 14423, смещение 0, флаги [нет], proto ICMP (1), длина 60)
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 1, длина 40

    19:04:49.973098 IP (tos 0xc0, ttl 64, id 29383, смещение 0, флаги [нет], proto ICMP (1), длина 88)
       10.11.12.254 > 10.11.12.176: превышено время ICMP в пути, длина 68
        IP-адрес (tos 0x0, ttl 1, идентификатор 14423, смещение 0, флаги [нет], прототип ICMP (1), длина 60)
       10.11.12.176 > 37.0.87.51: эхо-запрос ICMP, идентификатор 8761, последовательность 1, длина 40

    Трассировка TCP

    Теперь давайте посмотрим, как обстоят дела при использовании TCP SYN и порта 80 (используется другой хост-источник).Вот измененная команда tcpdump и выражение фильтра:

    sudo tcpdump -Knnvvi any '(udp и dst порт 53) или tcp dst порт 80 или icmp[icmptype] == 11'

    sudo tcpdump -Knnvvi любой '(udp и dst порт 53) или tcp dst порт 80 или icmp[icmptype] == 11'

    И команда traceroute:

    sudo traceroute --tcp --port 80 startpage.com

    sudo traceroute --tcp --port 80 стартовая страница.ком

    Вот некоторые из тестов TCP SYN:

    IP (tos 0x0, ttl 1, id 51513, смещение 0, флаги [нет], proto TCP (6), длина 52)
       10.101.210.201.39955 > 216.58.198.174.80: флаги [SEW], seq 1839786269, win 5240, параметры [mss 1310,nop,nop,sackOK,nop,wscale 2], длина 0

    IP (tos 0x0, ttl 2 , идентификатор 51516, смещение 0, флаги [нет], протокол TCP (6), длина 52)
       10.101.210.201.36083 > 216.58.198.174.80: флаги [SEW], seq 143600272, win 5240, параметры [mss 1310,nop,nop,sackOK,nop,wscale 2], длина 0

    IP (tos 0x0, ttl 3, id 51519, смещение 0, флаги [нет], протокол TCP (6), длина 52)
       10.101.210.201.57301 > 216.58.198.174.80: флаги [SEW], seq 1968846450, win 5240, параметры [mss 1310,nop,nop,sackOK,nop,wscale 2], длина 0

    IP (tos 0x0, ttl 1, id 51513, смещение 0, флаги [нет], proto TCP (6), длина 52)
       10.101.210.201.39955 > 216.58.198.174.80: флаги [SEW], seq 1839786269, win 5240, параметры [mss 1310,nop,nop,sackOK,nop,wscale 2], длина 0

    IP (tos 0x0, ttl 2 , идентификатор 51516, смещение 0, флаги [нет], протокол TCP (6), длина 52)
       10.101.210.201.36083 > 216.58.198.174.80: флаги [SEW], seq 143600272, win 5240, параметры [mss 1310,nop,nop,sackOK,nop,wscale 2], длина 0

    IP (tos 0x0, ttl 3 , идентификатор 51519, смещение 0, флаги [нет], протокол TCP (6), длина 52)
       10.101.210.201.57301 > 216.58.198.174.80: флаги [SEW], seq 1968846450, win 5240, параметры [mss 1310,nop,nop,sackOK,nop,wscale 2], длина 0

    Я запустил этот traceroute при подключении к общедоступной сети Wi-Fi и вообще не получил никаких сообщений ICMP Time Exceeded, но я думаю, вы уже знаете, как они выглядят.

    Инструмент traceroute также убирает за собой, отправляя RST, используя те же исходные порты, которые используются для отправки пакетов SYN. Это гарантирует, что любые устройства с отслеживанием состояния, которые могли создать записи в таблице соединений на основе пакетов SYN, быстро удалят их.Вы заметите, что пакеты RST вернулись к использованию TTL хоста по умолчанию, который в данном случае равен 55.

    IP (tos 0x0, ttl 55, id 0, offset 0, флаги [DF], proto TCP (6), длина 40)
       10.101.210.201.39955 > 216.58.198.174.80: Флаги [R], seq 1839786270, win 0, длина 0

    IP (tos 0x0, ttl 55, id 0, смещение 0, флаги [DF], proto TCP (6) , длина 40)
       10.101.210.201.36083 > 216.58.198.174.80: Флаги [R], seq 143600273, win 0, длина 0

    IP (tos 0x0, ttl 55, id 0, смещение 0, флаги [DF], proto TCP (6) , длина 40)
       10.101.210.201.57301 > 216.58.198.174.80: Флаги [R], последовательность 1968846451, выигрыш 0, длина 0

    IP (tos 0x0, ttl 55, id 0, смещение 0, флаги [DF], proto TCP (6), длина 40)
       10.101.210.201.39955 > 216.58.198.174.80: Флаги [R], seq 1839786270, win 0, длина 0

    IP (tos 0x0, ttl 55, id 0, смещение 0, флаги [DF], proto TCP (6) , длина 40)
       10.101.210.201.36083 > 216,58.198.174.80: флаги [R], seq 143600273, win 0, длина 0

    IP (tos 0x0, ttl 55, id 0, смещение 0, флаги [DF], proto TCP (6), длина 40)
       10.101.210.201.57301 > 216.58.198.174.80: Флаги [R], последовательность 1968846451, выигрыш 0, длина 0

    Есть еще

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

    Вы также можете использовать TTL или Hop Limit, чтобы определить вероятный источник сбросов соединения и подтвердить, отправляет ли их пункт назначения или что-то еще мешает. Если вы знаете, что дальний конец находится в 10 переходах и работает под управлением Linux (по умолчанию TTL 64), а TTL пакетов сброса равен 60, что-то не сходится.

    В качестве грубой, но эффективной формы защиты можно использовать очень низкое значение TTL или Hop Limit.Например, хост в центре обработки данных или AWS VPC может не нуждаться в обмене данными с чем-либо на расстоянии более 10 переходов (или меньше). Вы можете соответствующим образом установить значение TTL или Hop Limit и гарантировать, что связь с любым хостом за пределами этого «радиуса» не будет работать. Это защищает от многих методов кражи данных, управления и контроля, удаленного доступа и многого другого. Исходящий прокси-сервер можно использовать для доступа к разрешенным сайтам в Интернете, например, для обновления программного обеспечения.

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

    Ваш адрес email не будет опубликован.