Здравей Медиум, след известно време отново съм тук.

През последните дни изучавах мрежовия сокет.
Има много различни npm пакети, които правят внедряването му по-лесно и по-бързо, като socket.io, ws , websocket,и др.

Но основната информация и примери в интернет ги използват, така че какво, ако искаме да разберем нещо повече от готовите абстракции. Как и защоработи?

Определено не е лесна задача, няколко часа търсене и всички примери на Vanilla JS не бяха достатъчно ясни... Защо алгоритъмът е толкова сложен, защо е написан така, откъде идва информацията?

Не можах да разбера това, много неща, които се случват с няколко коментара и лошо именуване, бяха напълно объркани.

Затова реших да отделя повече време и да разбера още повече за мрежовите протоколи, особено от официалните документи на TCP (Transmission Control Protocol) и WebSocket.

Няколко часа по-късно най-накрая стигнах до ясна информация и наистина разбрах как трябва да се държи кодът и съм горд да го споделя с всички вас. Надявам се да бъда достатъчно ясен и да помогна на други любопитни умове.

Проверете проекта GitHub: https://github.com/gustavograeff/vanilla-js-web-socket.

Ще обясня някои важни части, разделяйки кода:

getValidHandShakeKey създава sha1 хеша, необходим за валидиране на комуникацията.

writeSocketValidUpgradeизгражда и записва правилните заглавки, от които се нуждае протоколът WebSocket.

sendClientDataFrameсъздава буфера и го записва в WebSocket, като изпраща тези данни до всички клиенти, които слушат връзката.

HandleClientWebSocketData чете данните, идващи от клиента към сървъра, буфер, който винаги е маскиран и трябва да бъде декодиран въз основа на алгоритъма от официалните документи.

Това е всичко, хора, наистина се надявам всички да харесате много тези съвети и не се колебайте да задавате въпроси/предложения в коментарите по-долу.
До скоро!