<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом мережа</title>
<link>https://blogengine.ru/blogs/tags/merezha/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Кратко о WebSocket</title>
<guid isPermaLink="false">119833</guid>
<link>https://stefaniuk.website/all/simple-about-websockets/</link>
<pubDate>Sun, 25 Nov 2018 16:10:55 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/simple-about-websockets/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;WebSocket-ы обеспечивают двухстороннюю связь между веб-приложениями и веб-серверами через один TCP-сокет. Этот протокол позволяет веб-приложению, выполняемому в браузере, оставаться подключенным к серверу и в то же время сводит к минимуму нагрузку на сервер, в частности использование памяти и других его ресурсов. Конечный эффект заключается в том, что данные и уведомления могут передаваться между браузерами и веб-серверами без задержки, и больше нет нужды в дополнительных запросах.&lt;/p&gt;
&lt;p&gt;Основной библиотекой для упрощения работы с сокетами от Microsoft является SignalR. Она берет на себя всю работу с данным протоколом и дает разработчику удобный интерфейс для работы.&lt;/p&gt;
&lt;p&gt;Где может использоваться SignalR? Прежде всего это приложения, которые получают данные в реальном режиме времени, например, чаты, социальные сети, игровые приложения, карты, приложения для аукционов, голосований и карт, панели управления, приложения для мониторинга данных и так далее.&lt;/p&gt;
&lt;p&gt;SignalR предоставляет разработчикам две модели: постоянные подключения (Persistent Connection) и хабы (Hubs).&lt;br /&gt;
Постоянные подключения (Persistent Connection API) представляют разработчикам прямой доступ к низкоуровневому протоколу коммуникации. Подключения в этой модели представляют конечную точку, к которой подключаются клиенты, наподобие модели подключений в WCF.&lt;br /&gt;
Хабы же предоставляют протокол взаимодействия более высокого уровня. Они представляют верхний слой над Persistent Connection API и позволяют клиенту и серверу напрямую вызывать методы друг друга.&lt;/p&gt;
&lt;p&gt;SignalR предоставляет следующие типы технологий для взаимодействия сервера и клиента:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WebSockets&lt;/li&gt;
&lt;li&gt;Server-sent events&lt;/li&gt;
&lt;li&gt;Forever Frames&lt;/li&gt;
&lt;li&gt;Long polling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Картинка, которая иллюстрирует процесс установления связи по протоколу WebSocket&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/10.jpeg" width="430" height="225" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Следующий код был взят из websocket.org, но он демонстрирует базовое взаимодействие со стороны клиента с данным протоколом:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;var wsUri = &amp;quot;ws://echo.websocket.org/&amp;quot;;
var output;

function init()
{
  output = document.getElementById(&amp;quot;output&amp;quot;);
  testWebSocket();
}

function testWebSocket()
{
  websocket = new WebSocket(wsUri);
  websocket.onopen = function(evt) { onOpen(evt) };
  websocket.onclose = function(evt) { onClose(evt) };
  websocket.onmessage = function(evt) { onMessage(evt) };
  websocket.onerror = function(evt) { onError(evt) };
}

function onOpen(evt)
{
  writeToScreen(&amp;quot;CONNECTED&amp;quot;);
  doSend(&amp;quot;WebSocket rocks&amp;quot;);
}

function onClose(evt)
{
  writeToScreen(&amp;quot;DISCONNECTED&amp;quot;);
}

function onMessage(evt)
{
  writeToScreen('&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;RESPONSE: ' + evt.data+'&amp;lt;/span&amp;gt;');
  websocket.close();
}

function onError(evt)
{
  writeToScreen('&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;ERROR:&amp;lt;/span&amp;gt; ' + evt.data);
}

function doSend(message)
{
  writeToScreen(&amp;quot;SENT: &amp;quot; + message);
  websocket.send(message);
}

function writeToScreen(message)
{
  var pre = document.createElement(&amp;quot;p&amp;quot;);
  pre.style.wordWrap = &amp;quot;break-word&amp;quot;;
  pre.innerHTML = message;
  output.appendChild(pre);
}

window.addEventListener(&amp;quot;load&amp;quot;, init, false);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ну и заключение, которое было к одной из статей и которое я не мог не вставить:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;По мнению многих, WebSockets — едва ли не самое полезное изобретение после горячей воды. Когда вы ухватите суть WebSockets, вы будете удивляться, как это мир программного обеспечения мог обходиться без этих сокетов. WebSockets здорово пригодится в ряде приложений, но отнюдь не во всех. В любом приложении, где мгновенный обмен сообщениями является ключевым требованием, — имеет смысл серьезно подумать о создании WebSocket-сервера и клиентов (веб-приложения, мобильные и даже настольные программы). Еще одна группа приложений, которые получат выигрыш от внедрения WebSocket Protocol, — игры и каналы реального времени. Да, WebSockets — определенно лучшее, что было изобретено после горячей воды!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ссылки:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;a href="https://www.codeproject.com/KB/webservices/c_sharp_web_socket_server.aspx?msg=3364691"&gt;Отличный пример реализации клиента и сервера без использования сторонних библиотек&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metanit.com/sharp/aspnet5/30.1.php"&gt;SignalR Core. Первое приложение&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://websocket.org/"&gt;Офф. сайт&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>


</channel>
</rss>