Введення
У 2017 році більшість популярних веб-ігор типу agar.io використовує для передачі даних WebSockets через TCP. Якби в браузерах був вбудований UDP-аналог WebSockets, то це б значно поліпшило роботу з мережами в цих іграх.

Вступна інформація
Робота веб-браузерів заснована на протоколі HTTP (протоколі запитів і відповідей без збереження стану). Спочатку він був призначений для обслуговування статичних веб-сторінок. HTTP працює поверх TCP, низькорівневого протоколу, гарантує надійну доставку і правильний порядок переданих по мережі даних.

Все це відмінно працювало багато років, але нещодавно веб-сайти стали інтерактивними і перестали відповідати парадигмі «запит-відповідь» протоколу HTTP. Для вирішення цієї проблеми винайдені сучасні веб-протоколи, такі як WebSockets, WebRTC, HTTP 2.0 і QUIC, що мають потенціал значного поліпшення інтерактивності мережі.

На жаль, новий комплект стандартів веб-розробки не відповідає потребам багатокористувацьких ігор або занадто складний у реалізації.

Це викликає розчарування у розробників ігор, адже вони просто хочуть мати можливість відправляти і приймати UDP-пакети через браузер.

Читати далі →

Швидкий курс Redux + websockets для бэкендера

Це короткий керівництво і навчання фронтэнеду для бэкендера. В даному посібнику я вирішую проблему швидкої побудови інтерфейсу до серверного додатка у вигляді односторінкового веб-додатки (single page app).
Основною метою мого дослідження є можливість за розумний час (для одного нормального людини) отримати зручний і простий у використанні інтерфейс-чернетка до серверного додатку. Ми (як розробники серверної частини) розуміємо, що наш пріоритет — серверна частина. Коли (в гіпотетичному проекті) з'являться у фронті профі своєї справи, вони все зроблять красиво і "правильно".
В ролі навчальної задачі представлена сторінка чату з якимось умоглядним "ботом", який працює на стороні сервера і приймає повідомлення тільки через WebSocket. Бот при цьому виконує ехо ваших повідомлень (ми тут не розглядаємо серверну частину взагалі).
Читати далі →

Робимо чергову .io-гру



Так звані .io-ігри — це браузерні massively multiplayer action-ігри, в яких безліч людей борються з надлишками вільного часу. Massively multiplayer — це означає, що гра являє собою розраховану на масовку з великої кількості (сотень+) гравців, що грають в загальній локації. Існує думка, що все почалося з гри Agar.io (клітини в чашці Петрі). Іншими успішними прикладами можна назвати Slither.io (змійки) і Diep.io (танчики). Якщо вірити статистиці, то кожен день в ці ігри грають мільйони гравців. Сьогодні існують десятки різних .io-ігор, більшість з яких можна знайти, загуглив за запитом «io games list».
Я розповім про те, як ми робили нашу .io-гру Oceanar.io — гру про рибок та інших морських мешканців, постараюся при цьому зосередитися на питаннях загального технічного пристрою всієї системи, і дам кілька скромних рад.

Читати далі →

WebSockets в Scorocode або чат своїми руками за 15 хвилин



Нещодавно ми додали підтримку WebSockets розробляється нами backend as a service Scorocode. Тепер ви можете повноцінно використовувати цю технологію при створенні додатків, що вимагають безпечного і універсального способу передачі даних.

У цій статті я розповім про внутрішню реалізації, з чим зіткнулися, як вирішували проблеми, а також наведу приклад простої програми, написаного з використанням технології і нашого сервісу.

Подробиці під катом.

Читати далі →

Філософія Channels

Минуло багато часу з мого останнього поста про Channels, і разом з цим багато чого сталося — API розроблено і стабілізоване, додався функціонал кшталт "контролю за переповненням" (backpressure), ситуація з бекендами виглядає набагато краще, особливо після того, як шар взаємодії локальних і віддалених машин став трохи дорослішими.
З іншого боку, однак, з'явилося непорозуміння і заклопотаність щодо напрямку, в якому розвивається Channels; напряму, який цей проект ставить для Django і Python. При розробці Channels довелося стосуватися і навіть боротися з моїми власними переживаннями про це напрямі, вибирати правильний набір компромісів — іноді навіть з двох однаково правильних варіантів.
Я не став публічно обговорювати мої обґрунтування та бачення розвитку для Channels настільки, наскільки я міг, я сподіваюся, цей пост трохи прояснить мою точку зору. Дозвольте позначити певну безліч проблем, які я намагаюся вирішити, пояснити, чому я вибрав той дизайн архітектури, який я вибрав, і розповісти про подальші кроки розвитку.
Читати далі →

Міграція сервісу віртуальних компаньйонок на WebRTC

Це історія одного проекту відеострімінгу.

image

Цікавий клієнт
Я сидів перед монітором вже цілу годину, а може і два. Все почалося з посилання на чийсь твіттер, яку колега люб'язно закинув мені в скайп. Потім випадково відкрив новинний сайт, потім Facebook, за цей час встигла з'явитися ще пара новин… загалом, спина вже затерпла і пора було піти розім'ятися. В офісі було прохолодно, тихо працювали кондиціонери. Виходити на вуличну спеку зовсім не хотілося і, разогнувшись, я дошкандибав до найближчого кавового автомата. Десь на ресепшені продзвенів дзвоник.

Через пару хвилин я побачив Ольгу, що супроводжує джентльмена азіатської зовнішності. На вигляд йому було близько п'ятдесяти. На злегка зморшкуватою голові сиділа сіра капелюх з короткими полями. Вони явно йшли до мене. Порівнявшись з кавовим автоматом, який вже дзюрчав у стаканчик моїм капучіно, джентельмен виголосив ламаною російською: Здраствуйте, я відносний проекту WebRTC. Моя звуть Суконако, і простягнув руку. Що привело сюди цього японця, подумав я, відповівши на потиск, і запросив гостя до свого кабінету. Далі нам довелося перейти на англійську мову, який нам обом був більш зрозумілий.

Збираємо вимоги
Я: Отже, чим можу бути корисний?

З: Ми працюємо з 2000 року в стриминге і Flex для великої кількості користувачів. Ми використовуємо Adobe Flash Media Server (FMS) і зараз хотіли б використовувати WebRTC.

Я: Можна детальніше про те, чого ви хотіли б досягти використанням WebRTC-сервера?

З: Нам потрібно звичайний медіасервер, який може приймати відеопотоки від одного користувача і передавати їх іншим користувачам. Ми хочемо відеочат.

Я: Без проблем, ми можемо зробити рішення на базі одного з WebRTC-серверів.

З: Adobe FMS нас повністю влаштовує. Ми хотіли б розширити коло наших користувачів на WebRTC, не прибираючи FMS. Він працює добре.
Читати далі →

Wkhtmltopdf + Node.JS

Створення pdf документів є досить поширеною завданням. З нею успішно справляється ціле сімейство бібліотек, що дозволяють буквально «зібрати» pdf по частинах або ж заповнити його на основі заздалегідь приготованого шаблону. Даний підхід надійний, т. до. ми можлива розраховувати на те, що, змінивши текст одного напису, не зникне пагинация на деяких сторінках. З іншого боку додавання нових сторінок pdf займає певний час у розробника і, чим більше різних візуальних елементів, тим більше часу на це йде.

Однак, є й інший шлях створення pdf документів: конвертування з деякого мови розмітки за допомогою відповідного інструменту. Даний спосіб буде ефективним і займе менше часу на внесення змін в pdf, коли вибраний інструмент працює досить передбачувано. Існує кілька подібних рішень, але на нашому проекті ми зупинили свій вибір на Wkhtmltopdf, яке генерує pdf документ з HTML. Через рік використання даного інструменту можу сказати, що вибір був зроблений правильний, оскільки всі потреби були покриті з головою.

У даній статті я хочу поділитися бібліотеками, що дозволяють спростити роботу з wkhtmltopdf в Node.JS.

Читати далі →

Live — чат і ActionCable

Хочу опублікувати коротеньку замітку про те, як інтегрувати, зарелизиный зовсім недавно, ActionCable в ваш Ruby on Rails проект на прикладі Live — чату. Я не буду заглиблюватися в те, як працює сам ActionCableпросто наведу невеличкий приклад.
Читати далі →

Створення ігор без canvas: Matreshka.js

Добра всім хаброчитателям!

У минулій статті ми розглядали спосіб створення карткових ігор з допомогою маніпуляцій з DOM, без використання canvas, на подобі HeartStone.

Сьогодні ми продовжимо цю тему, підключивши до нашої справи корисну в даному випадку бібліотеку Matreshka.js.
image

Читати далі →

Створення ігор без Canvas

Одного разу мені попалася на очі карткова гра HeartStone від Blizzard. Граючи в неї прийшла думка, що подібні речі можна створювати, використовуючи технології html5, що дозволить їм бути кроссплатфорсенными. На мій погляд, подібні речі можуть робити люди, досі займаються створенням сайтів.

Отже, що ми маємо:
  • Виділений сервер з LAMP (без phpDaemon);
  • Бажання обкатати WebSockets.


Власне, все. Цього цілком вистачить, щоб здійснити задумане.

Читати далі →