お絵描きを行う部分は HTML の Canvas を使い、その JavaScript イベント(TouchStart, TouchMove, TouchEnd)に応じて線を結んで Canvas に絵を描画することで実現しています。
また TouchEnd イベントが発生するたびに描画した絵を PNG 画像に変換し、アプリケーションサーバーへ送信しています。アプリケーションサーバー側では送信されてきた画像とそのユーザー ID を、配信者向け画面に WebSocket で通知します。
配信者画面ではユーザーが1ストローク描くたびに WebSocket 経由で送信されてくる画像をユーザー毎のフレーム内に再表示します。これをずっと繰り返すことで複数の参加者から非同期に送られてくる画像を全てハンドリングしてライブのように共有して見せる、ということを実現しています。
難しいのはユーザーの規模が100名単位のように増えた場合で、WebSocket プロトコル自体がステートフルなため、コンテナ環境でも単純にはスケールできません(全てのイベントを配信者が拾えきれなくなるため)。そこは Redis の Pub/Sub 機能を使って実現できることはわかっていますが、まだ実現できていません。
個々の配信者向けに、専用の部屋(URL)を発行したり、その部屋をパスワードで保護できるようにしています。これにより未来のイベントの QR コードを事前に発行して告知に含めることができるようにしています。この機能は将来的に有償とすることをイメージしていて、LINE PAY API を使っています(サンドボックス機能で動くところまで実装しています)。