
Как быстро начать работу с VUE3.0: Начало обучения.
Это первая статья в серии Nodejs. Когда я читал руководства раньше, многие из них начинались с ввода-вывода, буфера, пути, события, файловой системы, процесса и. Механизмы цикла событий узла. Это действительно зависимости разработки, на которые в основном опирается разработка узла. Но с тех пор, как я узнал об узле, это означает, что узел может выполнять бэкэнд, но первая половина этих курсов. говорить о его возможностях, то есть о том, как с ним взаимодействовать в конце концов. Знакомство с модулем взаимодействия с клиентом
мне очень неудобно, поэтому, когда я пишу свое резюме, мне приходится писать модуль, который общается между сервером. и клиент сначала чувствует себя комфортно. Даже если в процессе задействованы точки знаний модуля событий и модуля fs, можно пока отложить это и просто понять, как net модуль реализует связь в целом
Если вы хотите изучить модуль связи, вам необходимо понять модель сетевой связи. Если вы хотите запомнить модель сетевой связи, вам придется практиковать ее. Этому посвящено интервью. В этой области много контента, я хочу иметь в ней глубокое понимание, и она также требует систематического изучения. Вот лишь краткое упоминание
.

Для нашего внешнего интерфейса нам необходимо запомнить системные результаты набора протоколов TCP/IP:
прикладной уровень http (порт 80), FTP (21), SMTP (отправка почты), POP (получение почты),
транспортный уровень
: TCP/UDP
Интернет-уровень: IP, ICMP (дополнительный протокол уровня IP)
Уровень канала передачи данных: PPP, SLIP
Физический уровень: сеть использует витую пару, коаксиальный кабель, оптоволокно и другие методы передачи данных в соответствии со спецификацией ISO2110
от ICMP к этому. Из протоколов, присоединенных к протоколу IP, можно понять, что нет необходимости слишком беспокоиться о многоуровневости сетевых протоколов. ICMP очевидно, нуждается в протоколе IP в качестве основы, но он также запланирован как сетевой уровень. Наше правильное понимание модели OSI, по моему мнению, должно быть таким: использовать модель OSI для анализа проблем более целесообразно, чем использовать так называемое многоуровневое представление протоколов.
Набор протоколов TCP/IP не ограничивается TCP. и протоколы IP, но поскольку эти два протокола слишком необычны, используется TCP. /IP в совокупности относится к набору протоколов, связанных с Интернетом. Другой способ сказать, что это собирательное название для семейства протоколов, используемого в Интернете. Процесс использования протокола TCP/IP
Поток передачи данных клиента и сервера выглядит следующим образом.

Если роли становятся发送者и接受者, поток передачи будет следующим:

Видно, что в процессе передачи, начиная с отправляющей стороны, необходимая информация заголовка будет добавлена без прохождения уровней протокола и уровней кодирования. Затем, когда дело доходит до принимающей стороны. работают наоборот. Каждый уровень проходит через соответствующие заголовки. Просто подождите, пока не будут получены окончательные данные HTTP.
Вышеупомянутая
модель
сетевого протокола.
во многих местах результаты системы OSI объединяются в TCP/IP. После пятиуровневого протокола имя сетевого уровня станет уровнем Интернета

Первое рукопожатие: клиент отправляет флаг SYN (порядковый номер J) на сервер и переходит в состояние SYN_SENT (ожидание подтверждения от сервера).
Второе рукопожатие: сервер получает SYN J от клиента, и сервер подтверждает. Пакет данных был получен и отправлен бит флага ACK (порядковый номер J + 1) и бит флага SYN (порядковый номер K), а затем переходит в состояние SYN_REVD (состояние принятия запроса и ожидания подтверждения клиента)
третьего рукопожатия: Входит клиент. После установления соединения бит флага ACK (K+ 1) отправляется на сервер для подтверждения того, что клиент получил установленное соединение. После того, как сервер получает флаг ACK, сервер входит в состояние установления соединения
.J и
K оба используются для определения того, кто является соединением. В запросе нет разницы в структуре SYN и ACK, но отправляемые объекты различны.
net模块— это конкретная реализация вышеуказанного TCP-соединения.
,
для изучения API по-прежнему рекомендуется обращаться непосредственно к официальной документации. Содержимое документации на китайском языке не является последней версией.
Когда я учусь, я стараюсь читать документы на английском языке, когда у меня есть время. .Я настаивала на этом пол года.Поначалу я не выдержала, но теперь могу сдерживать дискомфорт и читать уже пол года. Прогресс со временем очевиден. это хорошая вещь.Значит,это не твоя зона комфорта.Ведь смелость пересечь зону комфорта-это источник прогресса.Давайте
перейдем к делу.Раз уж вы хотите научиться общению,то нам нужны двое. объекты для имитации клиента и сервера. Создайте два файла: client.js и service.js соответственно. Создайте с помощью командной строки:
touch client.js && touch service.js
представляет модуль net и позволяет сервер перейдет в состояние LISTENT , настроит номер порта и адрес HOST (вручную пропустив процесс разрешения DNS) и дождется вызова клиента
const net = require("net");
константный пост = 3306;
константный хост = "127.0.0.1";
константный сервер = net.createServer();
server.listen(post, host); В это время сервер соответствует статусу сервера LISTEN в TCP-соединении.
Затем он прослушивает некоторые необходимые события, которые представляют собой перехватчики, предоставляемые сервером (относится к знаниям, связанным с событиями). )
server.on("прослушивание", ( ) => {
console.log("Сервер можно подключить");
});
server.on("соединение", (сокет) => {
console.log("Клиент посещает");
});
server.on("закрыть", () => {
console.log("Сервер выключен");
});
server.on("ошибка", (ошибка) => {
console.log("На сервере произошла ошибка: ", error); // ошибка содержит информацию об ошибке}); Приведенная выше строка кодов включает в себя
listening : событие, инициируемое после прослушиванияconnection с портом: событие, инициируемое клиентом. посещенийclose : Вызваноerror завершения работы сервера : Вызвано ошибкой сервераЧто касается close , нам нужно обратить внимание на тот факт, что фоновый брат обычно напрямую
PS Kill -9 pid
выполняется путем уничтожения потока.
В connection с собакой формальным параметром является имя сокета. Его китайский перевод представляет собой вложенное слово, которое инкапсулируется в поток узлом. данные, отправленные клиентом. Это связано с тем, что сами данные имеют собственный метод, socket я обрабатываю в connection
server.on("connection", (socket) => {.
console.log("Клиент посещает");
socket.on("данные", (данные) => {
console.log(data); //Данные, отправленные клиентом});
}); поток будет представлен в будущих статьях.
Поскольку сервер может принимать данные, отправленные клиентом, он, естественно, может ответить клиенту. Запишите в socket.on (конечно, его можно написать и снаружи):
socket.write. («Я получил ваш сервер, клиент»);
В этот момент, если клиент завершил получение данных, а затем закрыл соединение, мы также можем отслеживать его через хук socket.on('close') :
socket.on. ("закрыть", () => {
console.log("Клиент отключил другой конец потока");
}); Поместите сводку событий socket в client.js . На данный момент все содержимое service.js выглядит следующим образом:
const net = require("net");
константный пост = 3306;
константный хост = "127.0.0.1";
константный сервер = net.createServer();
server.listen(сообщение, хост);
server.on("прослушивание", () => {
console.log("Сервер можно подключить");
});
server.on("соединение", (сокет) => {
console.log("Клиент посещает");
socket.on("данные", (данные) => {
console.log(data); //Данные, отправленные клиентомocket.write("Я получил их от вашего сервера, клиент");
});
socket.on("закрыть", () => {
console.log("Клиент отключил другой конец потока");
server.close(); // Клиенту данные больше не нужны, поэтому закроем сервер});
});
server.on("закрыть", () => {
console.log("Сервер выключен");
});
server.on("ошибка", (ошибка) => {
console.log("На сервере произошла ошибка: ", error); // ошибка содержит информацию об ошибке}); Клиентская часть намного проще.
const net = require("net");
константный пост = 3306;
константный хост = "127.0.0.1";
const сокет = net.connect(post, хост);
сокет.on("подключиться", () => {
console.log("Уже подключено к серверу");
});
socket.write("Сервер, вот и я");
socket.on("данные", (данные) => {
console.log(data.toString());
сокет.конец();
});
socket.on("закрыть", () => {
console.log("Соединение закрыто");
}); Сводка событий socket
connect : Успешное соединение с сервером запускаетdata : Получает параметры, отправленные соend сервера: После получения данных он может инициироватьclose : Закрытие сокета запускаетservice.js и client.js Запустите их после открытия двух терминалов:
node service.js. node client.js
может самостоятельно проверять распечатанные результаты.
Вся структура TCP-соединения в основном завершена. Конечно, фактическое производство - это гораздо больше, чем это. Ему также необходимо иметь дело с липкими пакетами, распаковкой/упаковкой, пакетами Heartbeat и т. д. и т. д.
Эта статья воспроизведена по адресу: https://juejin.cn/post/7084618854801866765
Автор: Я маленький апельсин.