Непонимание близких и конечных событий в сокетах - PullRequest
0 голосов
/ 21 июня 2019

Я не понимаю close и end событие.

const http = require("http");
const url = require("url");

const server = http.createServer((req, res) => {
    res.end();
});

server.on("connection", (socket) => {
    socket.on("close", () => {
        console.log("closed");
    })
    socket.on("end", () => {
        console.log("ended");
    })
});

server.listen(8080);

Единственное, что я знаю, это событие close, инициируемое после ок. 5 секунд.

1 Ответ

1 голос
/ 21 июня 2019

Здесь описаны события close и end для сокета: https://nodejs.org/api/net.html#net_event_end и https://nodejs.org/api/net.html#net_event_close_1.

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

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

Для сокета http-запроса (как показано в вашем примере) они представляют собой конец срока службы соединения http-запроса. Обычный цикл - клиент подключается к вашему http-серверу, который создает сокет-соединение между клиентом и сервером, данные запроса принимаются, сервер отправляет данные ответа, сокет закрыт. Сервер остается активным, ожидая больше входящих соединений.

сокеты HTTP-запросов могут быть закрыты, потому что был отправлен ответ, и передача выполнена (весь цикл HTTP-запроса / ответа выполнен), потому что произошла ошибка или потому что они в конечном итоге истекли без ответа.

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