fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

9.8K
active users

#websocket

4 posts4 participants0 posts today
Aral Balkan<p>New Kitten release 🎉</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>• New: Lovely new icons¹ and new callouts in Kitten Settings²</p><p>• New: Markdown now supports attributes and bracketed spans³</p><p>• New: client-side `kitten` global with `trigger` function for triggering events on the server from the client. (Useful when streaming client-side JavaScript when using Kitten’s Streaming HTML⁴ workflow. e.g., when you have to use a client-only web API like the Clipboard API but you want to keep all your logic on your server-side page.⁵)</p><p>• Fixed: The bound render function returned by `KittenComponent` class’s `component` getter now correctly awaits asynchronous templates. (In Kitten, you don’t have to care whether your templates contain promises. Kitten handles all that for you.)</p><p>Enjoy! :kitten:💕</p><p>¹ <a href="https://kitten.small-web.org/reference/#icons" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/reference</span><span class="invisible">/#icons</span></a></p><p>² <a href="https://mastodon.ar.al/@aral/114381983893061099" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.ar.al/@aral/114381983</span><span class="invisible">893061099</span></a></p><p>³ <a href="https://kitten.small-web.org/reference/#markdown-support" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/reference</span><span class="invisible">/#markdown-support</span></a> (also see <a href="https://mastodon.ar.al/@aral/114381462302862256" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.ar.al/@aral/114381462</span><span class="invisible">302862256</span></a>)</p><p>⁴ <a href="https://kitten.small-web.org/tutorials/streaming-html/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/tutorials</span><span class="invisible">/streaming-html/</span></a></p><p>⁵ e.g., See how I use this to implement a copy to clipboard button in the database page of Kitten’s Settings: <a href="https://codeberg.org/kitten/app/src/branch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/db/index.page.js#L33" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codeberg.org/kitten/app/src/br</span><span class="invisible">anch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/db/index.page.js#L33</span></a> Of course, you don’t have to use this and you can just write client-side JavaScript or use the built-in Alpine.js integration. e.g., how I do it on the (older) settings/identity page: <a href="https://codeberg.org/kitten/app/src/branch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/identity/index.page.js#L7" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codeberg.org/kitten/app/src/br</span><span class="invisible">anch/main/web/%F0%9F%90%B1/settings%F0%9F%94%92/identity/index.page.js#L7</span></a></p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/markdown" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>markdown</span></a> <a href="https://mastodon.ar.al/tags/icons" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>icons</span></a> <a href="https://mastodon.ar.al/tags/PhosphorIcons" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PhosphorIcons</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NodeJS</span></a></p>
Habr<p>Масштабируемая архитектура дёшево и сердито</p><p>🖥️ Микросервисы дёшево и сердито В стате разобран кейс масштабирования websocket сервера между произвольным количеством реплик. Реплики обрабатывают один порт ( SO_REUSEPORT ), а значит, продолжение обслуживания клиента при неполадках осуществляется бесшовно. Для взаимодействия между репликами используется шина событий IPC как наиболее оптимальный вариант в условиях ограниченного бюджета</p><p><a href="https://habr.com/ru/articles/903222/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/903222/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/typescript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>typescript</span></a> <a href="https://zhub.link/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a> <a href="https://zhub.link/tags/bun" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>bun</span></a> <a href="https://zhub.link/tags/ipc" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ipc</span></a> <a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://zhub.link/tags/%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>микросервисы</span></a> <a href="https://zhub.link/tags/pm2" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>pm2</span></a> <a href="https://zhub.link/tags/%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>многопоточность</span></a></p>
Neustradamus :xmpp: :linux:<p><a href="https://mastodon.social/tags/curl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>curl</span></a> 8.13.0 has been released (<a href="https://mastodon.social/tags/libcurl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>libcurl</span></a> / <a href="https://mastodon.social/tags/Haxx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Haxx</span></a> / <a href="https://mastodon.social/tags/DICT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DICT</span></a> / <a href="https://mastodon.social/tags/FILE" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FILE</span></a> / <a href="https://mastodon.social/tags/FTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FTP</span></a> / <a href="https://mastodon.social/tags/FTPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FTPS</span></a> / <a href="https://mastodon.social/tags/Gopher" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Gopher</span></a> / <a href="https://mastodon.social/tags/HTTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTP</span></a> / <a href="https://mastodon.social/tags/HTTPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTPS</span></a> / <a href="https://mastodon.social/tags/IMAP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IMAP</span></a> / <a href="https://mastodon.social/tags/IMAPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IMAPS</span></a> / <a href="https://mastodon.social/tags/LDAP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LDAP</span></a> / <a href="https://mastodon.social/tags/LDAPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LDAPS</span></a> / <a href="https://mastodon.social/tags/MQTT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MQTT</span></a> / <a href="https://mastodon.social/tags/POP3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>POP3</span></a> / <a href="https://mastodon.social/tags/POP3S" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>POP3S</span></a> / <a href="https://mastodon.social/tags/RTMP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RTMP</span></a> / <a href="https://mastodon.social/tags/RTMPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RTMPS</span></a> / <a href="https://mastodon.social/tags/RTSP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RTSP</span></a> / <a href="https://mastodon.social/tags/SCP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SCP</span></a> / <a href="https://mastodon.social/tags/SFTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SFTP</span></a> / <a href="https://mastodon.social/tags/SMB" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMB</span></a> / <a href="https://mastodon.social/tags/SMBS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMBS</span></a> / <a href="https://mastodon.social/tags/SMTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMTP</span></a> / <a href="https://mastodon.social/tags/SMTPS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SMTPS</span></a> / <a href="https://mastodon.social/tags/Telnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Telnet</span></a> / <a href="https://mastodon.social/tags/TFTP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TFTP</span></a> / <a href="https://mastodon.social/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> / <a href="https://mastodon.social/tags/SOCKS4" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SOCKS4</span></a> / <a href="https://mastodon.social/tags/SOCKS5" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SOCKS5</span></a> / <a href="https://mastodon.social/tags/SCRAM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SCRAM</span></a> / <a href="https://mastodon.social/tags/TLS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TLS</span></a> / <a href="https://mastodon.social/tags/HTTP2" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTP2</span></a> / <a href="https://mastodon.social/tags/HTTP3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTP3</span></a>) <a href="https://curl.se/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">curl.se/</span><span class="invisible"></span></a></p>
Habr<p>На пальцах про WebRTC на примере своего мессенджера</p><p>Сегодня разберёмся, как сделать видеозвонки — ту самую фичу, без которой сложно представить современное общение в 2025 году, на примере реализации мессенджера. Для этого мы познакомимся с WebRTC — технологией, которая позволяет приложениям устанавливать прямое соединение друг с другом для обмена аудио, видео и другими данными. Это мощный, но местами капризный инструмент, который требует понимания архитектуры, сигналинга и сетевых нюансов вроде NAT и ICE.</p><p><a href="https://habr.com/ru/articles/902084/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/902084/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/WebRTC" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebRTC</span></a> <a href="https://zhub.link/tags/react_native" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>react_native</span></a> <a href="https://zhub.link/tags/typescript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>typescript</span></a> <a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://zhub.link/tags/graphql" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>graphql</span></a></p>
oneM2M-The Global IoT Standard<p>If you are a <a href="https://c.im/tags/developer" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>developer</span></a> and need to combine several <a href="https://c.im/tags/protocol" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>protocol</span></a> <a href="https://c.im/tags/bindings" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>bindings</span></a> for an <a href="https://c.im/tags/IoT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IoT</span></a> system, the ACME-CSE provides a great environment for learning and experimentation <a href="https://acmecse.net/home/Supported/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">acmecse.net/home/Supported/</span><span class="invisible"></span></a> <a href="https://c.im/tags/CoAP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CoAP</span></a> <a href="https://c.im/tags/http" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>http</span></a> <a href="https://c.im/tags/MQTT" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MQTT</span></a> <a href="https://c.im/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a></p>
Alexey Skobkin<p>Блин, у меня какая-от непонятная херота с WebSocket соединениями на моём GoToSocial.</p><p>Альтернативные мастодон-морды не могут подключиться к вебсокету. А ручной коннект через создание вебсокета в консоли браузера - срабатывает.</p><p>При этом при WS-коннекте из того же Masto-FE Standalone (GTS flavor) я вижу, что в заголовках запроса улетает <code>sec-websocket-protocol</code> равный моему токену, который и так передаётся в урле при подключении:</p><pre><code>/api/v1/streaming?access_token=&lt;my_token_here&gt; </code></pre><p>И это очень странно. Потому что <code>sec-websocket-protocol</code> так-то вроде вообще не для этого.</p><p>Соответственно, если я попытаюсь воспроизвести руками и сделать примено так:</p><pre><code>new WebSocket( "wss://gts.skobk.in/api/v1/streaming?access_token=&lt;your_token&gt;", "&lt;your_token&gt;" ); </code></pre><p>То получу аналогичный результат с проблемой соединения.</p><p>Но вот какого хера это происходит - неясно.</p><p>Тем временем не факт, что проблема только в этом. В Phanpy при этом заголовка такого в запросе нет, но результат - такой же.</p><p>Со стороны GTS же я вижу такое:</p><pre><code>gotosocial | timestamp="13/04/2025 03:01:29.171" func=streaming.(*Module).handleWSConn level=INFO streamID=&lt;redacted&gt; username=skobkin requestID=&lt;redacted&gt; msg="opened websocket connection" ... gotosocial | timestamp="13/04/2025 03:01:34.214" func=streaming.(*Module).readFromWSConn level=ERROR streamID=&lt;redacted&gt; username=skobkin requestID=&lt;redacted&gt; msg="error during websocket read: websocket: close 1006 (abnormal closure): unexpected EOF" gotosocial | timestamp="13/04/2025 03:01:34.214" func=streaming.(*Module).handleWSConn level=INFO streamID=&lt;redacted&gt; username=skobkin requestID=&lt;redacted&gt; msg="closed websocket connection" </code></pre><p>Хотелось бы подумать, что "да это просто Nginx не настроен!", но:</p><ul><li>Руками-то сокет создаётся и переходит в статус <code>101</code></li><li>Другие сервисы с подобным конфигом работают нормально на этом же сервере</li></ul><p><a href="https://gts.skobk.in/tags/wtf" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WTF</span></a> <a href="https://gts.skobk.in/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://gts.skobk.in/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://gts.skobk.in/tags/gotosocial" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GoToSocial</span></a> <a href="https://gts.skobk.in/tags/log" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>log</span></a> <a href="https://gts.skobk.in/tags/fail" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FAIL</span></a></p>
Adam Nelson<p>It&#39;s 2025, and there&#39;s still no widely-used standardized RPC protocol for <a href="https://fosstodon.org/tags/WebSocket" class="mention hashtag" rel="tag">#<span>WebSocket</span></a>.</p><p>I&#39;ve looked from time to time, and I never find anything. WAMP is perhaps the closest, but it&#39;s massively complex, needs a separate router, and the company that &quot;owns&quot; it (Crossbar) is dead.</p><p>What else is there? I see the occasional attempt at JSON-RPC or gRPC over WebSocket, but each implementation is unique and nonstandard. I&#39;m half considering writing my own based on Lexicon (w/o the <a href="https://fosstodon.org/tags/ATProto" class="mention hashtag" rel="tag">#<span>ATProto</span></a> XRPC baggage).</p>
Habr<p>Кнопка «F5» устала: real-time уведомления в микросервисной архитектуре</p><p>Представьте себе: у вас железнодорожная станция, сотни вагонов, десятки пользователей в системе, каждый раз кто-то нажимает кнопку "Обновить", чтобы узнать — разгрузили ли нужный вагон. Вся логика обновления построена на "manual refresh". Да-да, пользователь сам жмёт кнопку, чтобы получить свежие данные. Система автоматической разгрузки или другой человек разгрузил что-то на другом конце станции, но вы об этом не узнаете, пока не перезагрузите страницу. А ещё — избыток HTTP-запросов, polling, перегруженные серверы и полное отсутствие real-time взаимодействия. Есть вариант! Масштабируемая и отказоустойчивая архитектура с использованием Redis Sentinel + Pub/Sub + WebSocket/SSE . В статье расскажем какие проблемы возникают с real-time в Kubernetes, почему стандартные WebSocket-подходы не работают при нескольких подах, как построить отказоустойчивую систему с Redis Sentinel, как сделать real-time UI, сохранив отказоустойчивость и масштабируемость, и как всё это запустить локально для отладки. 👇 Разбираем решение!</p><p><a href="https://habr.com/ru/companies/nlmk/articles/882004/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/nlmk/art</span><span class="invisible">icles/882004/</span></a></p><p><a href="https://zhub.link/tags/java" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>java</span></a> <a href="https://zhub.link/tags/redis" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>redis</span></a> <a href="https://zhub.link/tags/sentinel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sentinel</span></a> <a href="https://zhub.link/tags/sse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sse</span></a> <a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://zhub.link/tags/notifications" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>notifications</span></a></p>
Habr<p>WebSocket: просто о сложном. Часть 2 — практическое применение и тонкости</p><p>С вами снова Юля, системный аналитик из EvApps и мы продолжаем разбираться в технологии WebSocket. В первой части (WebSocket для начинающих системных аналитиков: просто о сложном. Часть 1 ) , мы познакомились с основами WebSocket, а теперь давайте заглянем под капот реального сайта, например, криптобиржи. Попробуем понять, как работает этот сложный механизм: что происходит, когда вы видите мгновенно меняющиеся котировки и графики, и что происходит “за кулисами”.</p><p><a href="https://habr.com/ru/articles/896836/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/896836/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://zhub.link/tags/frontend" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>frontend</span></a> <a href="https://zhub.link/tags/backend" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>backend</span></a> <a href="https://zhub.link/tags/realtime_web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>realtime_web</span></a> <a href="https://zhub.link/tags/%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Безопасность</span></a> <a href="https://zhub.link/tags/%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Производительность</span></a> <a href="https://zhub.link/tags/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>системный_анализ</span></a> <a href="https://zhub.link/tags/api" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>api</span></a></p>
Habr<p>Реализация простого SSE клиента на Dart</p><p>Хочу поделиться недавним кейсом из нашей практики мобильной разработки. Перед нами стояла задача — реализовать обновление данных в клиентском приложении в режиме реального времени, когда изменения на сервере моментально отображаются у пользователя. Мы рассматривали два подхода: WebSocket и Server-Sent Events (SSE). Оба варианта соответствовали нашим требованиям, но в итоге мы остановились на SSE — из-за его простоты реализации и использования стандартного HTTP-протокола.</p><p><a href="https://habr.com/ru/articles/896442/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/896442/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/sse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sse</span></a> <a href="https://zhub.link/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://zhub.link/tags/HTTP_streaming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTTP_streaming</span></a> <a href="https://zhub.link/tags/Flutter" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Flutter</span></a> <a href="https://zhub.link/tags/Dart" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Dart</span></a> <a href="https://zhub.link/tags/%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>клиентсервер</span></a> <a href="https://zhub.link/tags/%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>мобильное_приложение</span></a> <a href="https://zhub.link/tags/JSON" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JSON</span></a></p>
Chris Woody Woodruff<p>Live updates without the hassle? Yes, please. With HTMX and Razor Pages, you can sprinkle real-time magic using SSE—no WebSocket setup is required. Check out how to keep your UI fresh and reactive: <a href="https://woodruff.dev/real-time-magic-live-updates-with-htmx-and-asp-net-razor-pages/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">woodruff.dev/real-time-magic-l</span><span class="invisible">ive-updates-with-htmx-and-asp-net-razor-pages/</span></a></p><p><a href="https://mastodon.social/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.social/tags/aspnetcore" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>aspnetcore</span></a> <a href="https://mastodon.social/tags/webdev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webdev</span></a> <a href="https://mastodon.social/tags/ux" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ux</span></a> <a href="https://mastodon.social/tags/realtime" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>realtime</span></a> <a href="https://mastodon.social/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://mastodon.social/tags/sse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sse</span></a></p>
Habr<p>Тестированию WebSocket+STOMP соединения через Postman</p><p>Всем доброго времени суток! При работе над проектом мне и команде пришлось тестировать передачу сообщений по протоколу STOMP через WebSocket соединение. Обычно для таких задач я использую Postman, который, поддерживает установление WebSocket-соединений, хоть и в beta-версии. Однако при тестировании я столкнулся с проблемой: согласно спецификации STOMP, в конце каждого фрейма должен находиться нулевой байт (NULL, 00). При этом при отправлении сообщения через Postman нулевой байт не передается корректно. В этой статье я расскажу о причинах этой проблемы и о найденным мной решении.</p><p><a href="https://habr.com/ru/articles/895784/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/895784/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://zhub.link/tags/stomp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>stomp</span></a> <a href="https://zhub.link/tags/postman" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>postman</span></a> <a href="https://zhub.link/tags/testing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>testing</span></a></p>
Habr<p>Создание анонимного чата в Telegram: Бот с MiniApp интерфейсом. Часть 2 — VueJS3 + Centrifugo с монетизацией приложения</p><p>В первой части мы построили бэкенд на FastAPI, Aiogram, Redis и Centrifugo, заложив основу для анонимного чата в Telegram. Теперь пришло время развернуть фронтенд и создать стильный и отзывчивый интерфейс с использованием VueJS 3 в формате Telegram MiniApp. В этой статье мы: - Разработаем интерактивный UI с фильтрами поиска, анимациями загрузки и real-time чатом. - Настроим мгновенный обмен сообщениями через Centrifugo без лишних запросов к серверу. - Интегрируем монетизацию для заработка на рекламе в приложении. - Выполним деплой на удаленный сервер и подготовим проект к продакшену. Если вы хотите создать быстрый, удобный и монетизируемый анонимный чат в Telegram, который работает без задержек и перезагрузок, — эта статья для вас!</p><p><a href="https://habr.com/ru/companies/amvera/articles/893250/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/amvera/a</span><span class="invisible">rticles/893250/</span></a></p><p><a href="https://zhub.link/tags/telegram_mini_app" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_mini_app</span></a> <a href="https://zhub.link/tags/telegram_webapp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_webapp</span></a> <a href="https://zhub.link/tags/vuejs" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vuejs</span></a> <a href="https://zhub.link/tags/vue3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vue3</span></a> <a href="https://zhub.link/tags/vuejs3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vuejs3</span></a> <a href="https://zhub.link/tags/centrifuge" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>centrifuge</span></a> <a href="https://zhub.link/tags/centrifugo_v6" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>centrifugo_v6</span></a> <a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://zhub.link/tags/centrifugo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>centrifugo</span></a> <a href="https://zhub.link/tags/vuetg" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vuetg</span></a></p>
vvvv - a multipurpose toolkit<p>New episode of vvvvTv is out: S02E09: Controlling apps via a Web UI using WebSocket</p><p><a href="https://www.youtube.com/live/DR1ay0WR418?si=jiwwiKraMf7WgWXE" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">youtube.com/live/DR1ay0WR418?s</span><span class="invisible">i=jiwwiKraMf7WgWXE</span></a></p><p><a href="https://mastodon.xyz/tags/vvvv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvv</span></a> <a href="https://mastodon.xyz/tags/creativecoding" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>creativecoding</span></a> <a href="https://mastodon.xyz/tags/visualprogramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>visualprogramming</span></a><br><a href="https://mastodon.xyz/tags/dotnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dotnet</span></a> <a href="https://mastodon.xyz/tags/vvvvTv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvvTv</span></a> <a href="https://mastodon.xyz/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
Habr<p>Маршрутизация VLESS-REALITY через HAProxy с маскировкой под свой сайт (steal-oneself)</p><p>Третья часть по маршрутизации сайтов и сервисов на 443 порту включая VLESS-Reality и VLESS+WebSocket через HAProxy.</p><p><a href="https://habr.com/ru/articles/885276/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/885276/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/Haproxy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Haproxy</span></a> <a href="https://zhub.link/tags/VLESS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>VLESS</span></a> <a href="https://zhub.link/tags/REALITY" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>REALITY</span></a> <a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
Habr<p>WebSocket для начинающих системных аналитиков: просто о сложном. Часть 1</p><p>Меня зовут Юля, я системный аналитик в компании EvApps. Эта статья для начинающих системных аналитиков, которые хотят понять основы WebSocket. В своей работе мне иногда приходится сталкиваться с веб-приложениями, которые обмениваются данными в реальном времени: чаты, колл-центры, финансовые приложения. Часто за этим стоит технология WebSocket. В этой статье, я простыми словами расскажу, что такое WebSocket, и почему вам, как начинающему системному аналитику, важно знать о них.</p><p><a href="https://habr.com/ru/articles/886802/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/886802/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a> <a href="https://zhub.link/tags/handshake" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>handshake</span></a> <a href="https://zhub.link/tags/ajax" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ajax</span></a> <a href="https://zhub.link/tags/http" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>http</span></a> <a href="https://zhub.link/tags/ws" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ws</span></a> <a href="https://zhub.link/tags/wss" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>wss</span></a></p>
vvvv - a multipurpose toolkit<p>New episode of vvvvTv is out: S02E08: Multiplayer Installation using WebSocket</p><p><a href="https://www.youtube.com/live/GtKx2v5Egxw?si=Y_C333EjM0P45xea" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">youtube.com/live/GtKx2v5Egxw?s</span><span class="invisible">i=Y_C333EjM0P45xea</span></a></p><p><a href="https://mastodon.xyz/tags/vvvv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvv</span></a> <a href="https://mastodon.xyz/tags/creativecoding" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>creativecoding</span></a> <a href="https://mastodon.xyz/tags/visualprogramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>visualprogramming</span></a><br><a href="https://mastodon.xyz/tags/dotnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dotnet</span></a> <a href="https://mastodon.xyz/tags/vvvvTv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvvTv</span></a> <a href="https://mastodon.xyz/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
vvvv - a multipurpose toolkit<p>New episode of vvvvTv is out: S02E07: Talking to an API via WebSocket</p><p><a href="https://www.youtube.com/live/TTvkQgGZfZw?si=tBfqQOSQ5Aq4LTGM" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">youtube.com/live/TTvkQgGZfZw?s</span><span class="invisible">i=tBfqQOSQ5Aq4LTGM</span></a></p><p><a href="https://mastodon.xyz/tags/vvvv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvv</span></a> <a href="https://mastodon.xyz/tags/creativecoding" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>creativecoding</span></a> <a href="https://mastodon.xyz/tags/visualprogramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>visualprogramming</span></a><br><a href="https://mastodon.xyz/tags/dotnet" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dotnet</span></a> <a href="https://mastodon.xyz/tags/vvvvTv" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>vvvvTv</span></a> <a href="https://mastodon.xyz/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>
Aral Balkan<p>New Kitten Release</p><p>• Automatic message routing: if the element that triggers an event on the client does not have a `name` attribute, Kitten now falls back to using its `id` instead to route the event to the correct server-side event handler on your live Kitten pages. </p><p>If neither attribute exists, Kitten will fail to route the message but no longer crash as it was due to a regression introduced when I implemented support for colons in element names.¹</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>For more details on Kitten’s live pages and automatic message routing, please see the Streaming HTML tutorial:</p><p><a href="https://kitten.small-web.org/tutorials/streaming-html/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kitten.small-web.org/tutorials</span><span class="invisible">/streaming-html/</span></a></p><p>Enjoy!</p><p>:kitten:💕</p><p>¹ A colon in an element name is ignored for message routing purposes, letting you, for example, give unique names to &lt;details&gt; elements, allowing more than one to be open at a time, while having their events be handled by the same handler.</p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/SmallTech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallTech</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/hypermedia" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>hypermedia</span></a> <a href="https://mastodon.ar.al/tags/htmx" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>htmx</span></a> <a href="https://mastodon.ar.al/tags/WebSocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebSocket</span></a> <a href="https://mastodon.ar.al/tags/beautifulDefaults" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>beautifulDefaults</span></a> <a href="https://mastodon.ar.al/tags/StreamingHTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StreamingHTML</span></a></p>
Habr<p>Centrifugo v6 + FastAPI + Python: разрабатываем веб-опросник с обновлениями в реальном времени</p><p>В прошлой статье я показал, как создать мини-чат с комнатами на FastAPI и WebSockets. Но что, если есть более мощное и удобное решение для Real-time? В этот раз разберем Centrifugo – технологию, которая берет на себя всю работу с WebSockets и масштабированием! В статье мы разберем теорию, а затем на практике разработаем веб-приложение-опросник, где результаты обновляются в реальном времени без перезагрузки страницы. А в финале – деплой на Amvera Cloud. Готовы прокачать свои навыки? Тогда вперед!</p><p><a href="https://habr.com/ru/companies/amvera/articles/885714/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/amvera/a</span><span class="invisible">rticles/885714/</span></a></p><p><a href="https://zhub.link/tags/centrifugo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>centrifugo</span></a> <a href="https://zhub.link/tags/centrifugo_v6" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>centrifugo_v6</span></a> <a href="https://zhub.link/tags/fastapi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>fastapi</span></a> <a href="https://zhub.link/tags/sqlite" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlite</span></a> <a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a> <a href="https://zhub.link/tags/sqlalchemy_20" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy_20</span></a> <a href="https://zhub.link/tags/sqlalchemy_sqlite" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy_sqlite</span></a> <a href="https://zhub.link/tags/javascript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>javascript</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>вебразработа</span></a> <a href="https://zhub.link/tags/websocket" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>websocket</span></a></p>