В этом блоге я собираюсь установить соединение WebSocket между клиентом и сервером, используя структуру удовлетворения узла.
Что такое веб-сокет:
- Websocket — это протокол связи.
- Websocket позволяет нам установить полнодуплексное соединение из веб-браузера пользователя на сервер.
- Соединение WebSocket инициируется путем отправки запроса квитирования WebSocket из HTTP-соединения браузера на сервер.
Что такое запрос квитирования WebSocket:
- Запрос квитирования Websocket используется для установления полнодуплексного соединения. если клиенту требуется соединение WebSocket, тогда клиент должен отправить запрос установления связи на сервер, и сервер отправит ответ на этот запрос.
- В соединении WebSocket браузер и сервер могут взаимодействовать друг с другом одновременно.
Клиентский запрос подтверждения:
хост: локальный
обновление: веб-сокет
подключение: Обновление
Sec-webSocket-ключ: jk23kh13523kjob23b13b2==*
Sec-webSocket-Версия: 13
- Здесь клиент отправит ключ Sec-WebSocket, закодированный в base64, 16-байтовое значение, а секретный ключ выбирается случайным образом.
- И эта строка хэшируется с помощью SHA-1.
- Ключ sec-WebSocket используется для открытия соединения WebSocket. он отправляется с сервера.
Ответ сервера такой:
Обновление: веб-сокет
подключение: Обновление
Sec-WebScoket-Accept: Hkjadf114kdbja23=
Sec-webScoket-Accept:
- Эта строка также хэшируется SHA-1, что дает шестнадцатеричные значения.
- Этот заголовок отправляется с сервера клиенту, чтобы сообщить, что сервер готов инициировать соединение WebSocket.
Теперь мы можем перейти к нашему мини-проекту:
- В этом примере я собираюсь установить соединение WebSocket между клиентом и сервером.
Первоначальная настройка этого проекта:
- Во-первых, нам нужно инициализировать папку вашего проекта с помощью npm, только тогда мы сможем загрузить пакеты npm.
$ npm инициализация -y
- После выполнения вышеуказанной команды мы должны установить пакет falsify с помощью команды npm install.
$ npm установить быстро
- И, наконец, нам нужно загрузить пакет WebSocket с именем «fastify-ws».
Приведенный выше фрагмент кода принадлежит мне, мы также можем загрузить пакет nodemon, который используется для автоматического перезапуска сервера.
Теперь я собираюсь создать сервер, используя фреймворк node fastify.
на стороне сервера:
- Фрагмент кода ниже — это мой файл server.js.
- В этом файле я сначала создал сервер, который прослушивает порт 8080.
- И самое главное, я зарегистрировал свой пакет «fastify-ws» в папке моего проекта.
- использование функции fatisfy.ws.on() заключается в том, что сначала эта функция работает как генератор событий.
fastify.ws.on('соединение', wscontroller)
- Когда соединение установлено, запускается функция обратного вызова этой функции. wscontrollser — это функция.
- Внутри функции wscontroller я написал две функции ws, которые работают как эмиттеры событий.
ws.on(‘сообщение’, (msg) =› {
константные данные = JSON.parse(msg);
console.log(данные);
ws.send(JSON.stringify({
msg: «Вы успешно подключены»,
}));
})
- одна функция перечисляет событие сообщения, когда это событие произошло. Функция обратного вызова этой функции запускается со стороны сервера.
- после запуска этой функции обратного вызова ws.send(JSON.stringify({msg: «Вы успешно подключены»})) отправляет сообщение клиенту.
- Всякий раз, когда клиент подключается через соединение WebSocket, это сообщение отправляется клиенту с сервера.
на стороне клиента:
- В этом файле мне потребовался объект WebSocket ws, используя функцию require().
- «ws» — это встроенный модуль, и я присвоил ему переменную с именем webSocket.
- И эта переменная WebSocket является конструктором.
- И я создаю экземпляр функции класса WebSocket и присваиваю ей значение.
постоянный хост = ‘ws://127.0.0.1:8080?user_id=1’
const ws = новый WebSocket (хост);
- Переменная ws является объектом.
- Функция ws.onopen() используется для открытия сервера WebSocket. всякий раз, когда клиент подключается к серверу с использованием соединения WebSocket, на сервер отправляется сообщение ws.send(JSON.stringify({ name: «Client one is here» })) .
ws.onopen = функция (событие) {
ws.send(JSON.stringify({ name: «Клиент один здесь» }))
}
- ws.onmessage(), которая также является функцией, когда сообщение отправляется с сервера, и это сообщение передается параметру функции обратного вызова этой функции. Таким образом, с помощью этой функции мы можем получить сообщение, отправленное с сервера.
ws.onmessage = (msg) =› {
константные данные = JSON.parse(msg.data);
console.log(данные.msg);
}
- И последнее — это функция ws.on(), которая также прослушивает событие, которое является событием закрытия. Когда соединение сокета закрывается со стороны сервера, это событие «закрытия» запускает эту функцию обратного вызова.
ws.on(‘закрыть’, () =› {
console.log(`Вы остановлены сервером!!!`)
})