Я Дэвид, и моя цель в этой репозитории/статье - демистифицировать розетки, пытаясь объяснить их самым простым возможным способом.
В этих примерах я собираюсь использовать Nodejs и частицы (любая версия), чтобы показать, как оборудование может разговаривать с Nodejs, и наоборот. Но не заблуждайтесь, это не означает, что инструменты, которые я выбираю, являются единственным способом сделать это. Это то, что я лично знаю.
Любое встроенное устройство с сетевым подключением будет работать аналогичным образом, а также будет любой язык с поддержкой сокетов.
Репо -структура
Я полагаю, что есть большая мера загадки вокруг гнезда. Многие люди заставляли их звучать страшно на протяжении многих лет, и моя цель - доказать, что они не такие загадочные или сложные. Я надеюсь, что, в конце концов, вы будете думать о розетках как о более простом решении конкретной проблемы.
Особенно в встроенных системах, где считается каждый байт.
Глазки являются основой для всех сетевых подключений. Каждое подключенное устройство использует гнезда. Помимо гнезда, у вас будут протоколы, которые представляют собой не что иное, как правила, в которых указывается, как данные следует отправлять или обрабатывать после их получения. Популярный протокол HTTP является примером этого. Зная это, вы можете имитировать любое устройство с любым языком, у которого есть поддержка сокетов. Как? Отправляя байты, которые придерживаются конкретных протоколов (правила). Эти правила свободно доступны в Интернете.
Вы можете сделать приложение, которое притворяется:
Почему люди считают, что гнезда сложны?
Вероятно, потому что люди склонны использовать слова, которые передают сложность, например:
Просто прочитав эти несколько моментов, которые вы можете подумать, это не для меня. Но гнезда на самом деле очень просты. Например, чтобы получить ответ от веб -сервера, вам просто нужно отправить следующий текст:
GET / HTTP/1.1
Это все. Сервер возьмет этот текст, проанализирует его и поймет, что вы делаете:
/contact , чтобы получить страницу контакта.Там не так много больше. Принтер поймет еще один заголовок, аналогично DNS -серверу потребуется что -то конкретное для его протокола (правила).
Трудно поверить? Используйте приложение Telnet для подключения к вашему любимому сайту, используя эту команду (только небезопасное соединение будет поддерживаться через порт 80).
SITE 80GET / HTTP/1.1Для безопасного соединения вы можете использовать OpenSSL следующим образом:
Openssl s_client -connect google.com:443GET / HTTP/1.1Другим примером было бы отправить электронное письмо, подключившись прямо к SMTP -серверу. Большинство текущих серверов SMTP защищены паролями и используют шифрование, что затрудняет его быстрое тестирование. Но если бы у вас был доступ к простому SMTP -серверу, вы могли бы просто ввести следующее:
telnet example.com smtpHELO client.example.comMAIL from: <[email protected]>RCPT to: <[email protected]>DATAFrom: [email protected]To: [email protected]Subject: Test messageQUITКак видите, это не так?
Теперь, когда мы лучше понимаем протоколы, вам нужно спроектировать общую структуру для общения. Допустим, вы хотите отправить температуру вашего дома на ваш сервер Nodejs. Ваш поток байтов может выглядеть так:
45,40.1,50,90,100,102.5
Запятая действует как сепаратор для каждого измерения. Вы можете выбрать любого персонажа, который вы хотите, но, просто чтобы вы знаете, запятая сделает ваши данные совместимыми с форматом CSV (разделенные запятые значения). С другой стороны, вам нужен какой -то код, который будет проверять сепаратор, и когда это произойдет - у вас есть значение.
Как вы можете видеть из этого примера, нет заголовка или дополнительных данных. Вы решаете, что происходит в вашем протоколе.
На основании приведенного выше примера вы можете добавить влажность в свой протокол, например:
45:80,40:85,32.1:82,50:89
Опять же, запятая отделяет ваши данные, в то время как толстая кишка отличает ваш набор данных. Кроме того: помните ... протоколы нуждаются в хорошей документации, чтобы другие разработчики могли разобраться в данных, которыми им придется управлять.
Еще одно важное, что в его примере рассказывается о протоколе ASCII, чтобы узнать, как работает бинарный, вы можете прочитать следующую статью, которую я написал под названием: «Как реконструкция-пинг-с-c-andodejs».
Компьютеры работают в 1 и 0 с, и это факт. Пример не может отличить скомпилированное приложение от обычных данных. Все хранится как серия битов. Это означает, что даже данные, которые отправляются через Интернет, находятся в 1 и 0.
Вы, вероятно, спрашиваете, тогда почему я должен заботиться о типах. Потому что в зависимости от вашего типа ваши двоичные данные будут разными. Например: целое число из 1 будет 00000001 , где целое число из 31 станет 00011111 .
Это означает, что на другом конце связи вам нужно знать, что вы получаете. Допустим, вы хотите провести простое сравнение.
if ( data == 1 ) {
true
} Если вы преобразовали свои данные, как будто это было целое число, но вы отправили их в качестве символа, то вы сравните Int 31 с INT 1 . Но если вы знаете, что отправляете персонажа, вы можете сравнить его с правильным типом:
if ( data == '1' ) {
true
} Теперь char 1 на самом деле 31 , и сравнение будет работать. В папке Hardware2NodeJS пример вы найдете пример кода, который объясняет разницу в практике.
В Интернете двумя наиболее популярными протоколами для отправки данных являются TCP и UDP. Вы увидите, что люди добавляют /ip в конце имени. IP означает (интернет -протокол), и, короче говоря, вы можете думать об этом как о адресной системе Интернета. Это означает, что вы можете использовать TCP или UDP не только в Интернете, потому что TCP и UDP - это то, как данные упаковываются, какую адресную систему вы используете, зависит от вас.
TCP и UDP являются протоколами, и к настоящему времени вы должны знать, что это слово означает правила, и эти два протокола - не что иное, как правила, объясняющие, как упаковать данные. Другой конец понимает те же правила и может распаковать полученную информацию, и наоборот.
Большая часть Интернета использует TCP, потому что мы хотим, чтобы то, что мы отправили, будет получено полностью на другом конце. Например, если вы отправляете документ, вы не хотите, чтобы буквы или слова отсутствовали. Со многими форматами, если в заголовке отсутствуют детали, в котором рассказывается о том, как понять файл, система сообщит вам, что файл поврежден и не может быть прочитана.
Конечно, есть форматы, которые более устойчивы и не нуждаются в 100 процентах данных. Например, некоторые фильмы, изображения и музыкальные форматы могут пропустить некоторый контент, и мы просто живем с этим. Изображение или фильм могут иметь некоторые странные артефакты; Музыка может иметь несколько вспышек и шумов.
Этот протокол очень полезен при отправке данных из аппаратных продуктов. Допустим, мы собираем данные датчиков из многих устройств, используя сотовой модем, и мы должны платить за каждый байт, который мы отправляем. В этом случае мы должны рассмотреть следующее: стоит ли платить больше за более высокую точность, которую мы имели бы с TCP? Или лучше принять потерю некоторых измерений, но платить меньше за передачу данных?
Обычно я бы по умолчанию по умолчанию в отношении TCP, но если у вас есть хороший случай против его использования, UDP - ваш следующий лучший вариант.
Я надеюсь, что этот репозиторий помог вам лучше понять, что такое гнезда. Если что -то неясно, поразите меня в Твиттере, и я постараюсь исправить какие -либо очки в проекте, которые неясны.
Я хочу поблагодарить всех хороших людей, которые помогли мне с этим проектом, включая:
Если вам понравился этот проект, подумайте о том, чтобы дать ему? И проверьте мою учетную запись GitHub, где вы найдете дополнительные ресурсы, вы можете найти полезными или интересными.
Этот проект представлен вам 0x4447 LLC, компанией -разработчиком программного обеспечения, специализирующейся на создании пользовательских решений на вершине AWS. Перейдите по этой ссылке, чтобы узнать больше: https://0x4447.com. В качестве альтернативы отправьте электронное письмо на [email protected].