{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блоги: заметки с тегом мережа",
    "_rss_description": "Автоматически собираемая лента заметок, написанных в блогах на Эгее",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/blogengine.ru\/blogs\/tags\/merezha\/",
    "feed_url": "https:\/\/blogengine.ru\/blogs\/tags\/merezha\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/blogengine.ru\/blogs\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "119833",
            "url": "https:\/\/stefaniuk.website\/all\/simple-about-websockets\/",
            "title": "Кратко о WebSocket",
            "content_html": "<p>WebSocket-ы обеспечивают двухстороннюю связь между веб-приложениями и веб-серверами через один TCP-сокет. Этот протокол позволяет веб-приложению, выполняемому в браузере, оставаться подключенным к серверу и в то же время сводит к минимуму нагрузку на сервер, в частности использование памяти и других его ресурсов. Конечный эффект заключается в том, что данные и уведомления могут передаваться между браузерами и веб-серверами без задержки, и больше нет нужды в дополнительных запросах.<\/p>\n<p>Основной библиотекой для упрощения работы с сокетами от Microsoft является SignalR. Она берет на себя всю работу с данным протоколом и дает разработчику удобный интерфейс для работы.<\/p>\n<p>Где может использоваться SignalR? Прежде всего это приложения, которые получают данные в реальном режиме времени, например, чаты, социальные сети, игровые приложения, карты, приложения для аукционов, голосований и карт, панели управления, приложения для мониторинга данных и так далее.<\/p>\n<p>SignalR предоставляет разработчикам две модели: постоянные подключения (Persistent Connection) и хабы (Hubs).<br \/>\nПостоянные подключения (Persistent Connection API) представляют разработчикам прямой доступ к низкоуровневому протоколу коммуникации. Подключения в этой модели представляют конечную точку, к которой подключаются клиенты, наподобие модели подключений в WCF.<br \/>\nХабы же предоставляют протокол взаимодействия более высокого уровня. Они представляют верхний слой над Persistent Connection API и позволяют клиенту и серверу напрямую вызывать методы друг друга.<\/p>\n<p>SignalR предоставляет следующие типы технологий для взаимодействия сервера и клиента:<\/p>\n<ul>\n<li>WebSockets<\/li>\n<li>Server-sent events<\/li>\n<li>Forever Frames<\/li>\n<li>Long polling<\/li>\n<\/ul>\n<p>Картинка, которая иллюстрирует процесс установления связи по протоколу WebSocket<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/stefaniuk.website\/pictures\/10.jpeg\" width=\"430\" height=\"225\" alt=\"\" \/>\n<\/div>\n<p>Следующий код был взят из websocket.org, но он демонстрирует базовое взаимодействие со стороны клиента с данным протоколом:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">var wsUri = &quot;ws:\/\/echo.websocket.org\/&quot;;\r\nvar output;\r\n\r\nfunction init()\r\n{\r\n  output = document.getElementById(&quot;output&quot;);\r\n  testWebSocket();\r\n}\r\n\r\nfunction testWebSocket()\r\n{\r\n  websocket = new WebSocket(wsUri);\r\n  websocket.onopen = function(evt) { onOpen(evt) };\r\n  websocket.onclose = function(evt) { onClose(evt) };\r\n  websocket.onmessage = function(evt) { onMessage(evt) };\r\n  websocket.onerror = function(evt) { onError(evt) };\r\n}\r\n\r\nfunction onOpen(evt)\r\n{\r\n  writeToScreen(&quot;CONNECTED&quot;);\r\n  doSend(&quot;WebSocket rocks&quot;);\r\n}\r\n\r\nfunction onClose(evt)\r\n{\r\n  writeToScreen(&quot;DISCONNECTED&quot;);\r\n}\r\n\r\nfunction onMessage(evt)\r\n{\r\n  writeToScreen('&lt;span style=&quot;color: blue;&quot;&gt;RESPONSE: ' + evt.data+'&lt;\/span&gt;');\r\n  websocket.close();\r\n}\r\n\r\nfunction onError(evt)\r\n{\r\n  writeToScreen('&lt;span style=&quot;color: red;&quot;&gt;ERROR:&lt;\/span&gt; ' + evt.data);\r\n}\r\n\r\nfunction doSend(message)\r\n{\r\n  writeToScreen(&quot;SENT: &quot; + message);\r\n  websocket.send(message);\r\n}\r\n\r\nfunction writeToScreen(message)\r\n{\r\n  var pre = document.createElement(&quot;p&quot;);\r\n  pre.style.wordWrap = &quot;break-word&quot;;\r\n  pre.innerHTML = message;\r\n  output.appendChild(pre);\r\n}\r\n\r\nwindow.addEventListener(&quot;load&quot;, init, false);<\/code><\/pre><p>Ну и заключение, которое было к одной из статей и которое я не мог не вставить:<\/p>\n<blockquote>\n<p>По мнению многих, WebSockets — едва ли не самое полезное изобретение после горячей воды. Когда вы ухватите суть WebSockets, вы будете удивляться, как это мир программного обеспечения мог обходиться без этих сокетов. WebSockets здорово пригодится в ряде приложений, но отнюдь не во всех. В любом приложении, где мгновенный обмен сообщениями является ключевым требованием, — имеет смысл серьезно подумать о создании WebSocket-сервера и клиентов (веб-приложения, мобильные и даже настольные программы). Еще одна группа приложений, которые получат выигрыш от внедрения WebSocket Protocol, — игры и каналы реального времени. Да, WebSockets — определенно лучшее, что было изобретено после горячей воды!<\/p>\n<\/blockquote>\n<p>Ссылки:<\/p>\n<ol start=\"1\">\n<li><a href=\"https:\/\/www.codeproject.com\/KB\/webservices\/c_sharp_web_socket_server.aspx?msg=3364691\">Отличный пример реализации клиента и сервера без использования сторонних библиотек<\/a><\/li>\n<li><a href=\"https:\/\/metanit.com\/sharp\/aspnet5\/30.1.php\">SignalR Core. Первое приложение<\/a><\/li>\n<li><a href=\"http:\/\/websocket.org\/\">Офф. сайт<\/a><\/li>\n<\/ol>\n",
            "date_published": "2018-11-25T16:10:55+05:00",
            "date_modified": "2023-06-03T05:04:11+05:00",
            "tags": [
                "мережа"
            ],
            "author": {
                "name": "Bohdan Stefaniuk",
                "url": "https:\/\/stefaniuk.website\/",
                "avatar": "https:\/\/stefaniuk.website\/pictures\/userpic\/userpic@2x.jpg?1565716580"
            },
            "_date_published_rfc2822": "Sun, 25 Nov 2018 16:10:55 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "119833",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079e)"
}