Web のクライアント通知の話

WebSocket, SSE, ロングポーリングあたりが選択肢になってくるらしい。
3
よんてんごP @yontengoP

Webシステム上で AさんからBさんメッセージを送った場合、リアルタイムにBさん側に「✉メッセージ!」を表示するのって 低スキルおじさん的には ✅メッセージをDBに格納 ✅Bさんから1秒おきとかにDBにSELECT投げて ✅自分宛てのがあったら通知 って実装が手っ取り早いと思ってんだけど 別案ある…?

2023-02-26 08:10:00
V @voluntas

WebSocket か SSE か ロングポーリング が無難だと思う。保存と通知は別実装にすべき。 twitter.com/yontengop/stat…

2023-02-26 11:12:51
V @voluntas

プッシュ通知で WebRTC 使うのは圧倒的にコスパ悪い。

2023-02-26 11:13:38
V @voluntas

ほとんどの場合はロングポーリングで事足りるって事なんだろうな。

2023-02-26 11:33:49
V @voluntas

ロングポーリングって言い方悪かったな、いにしえの Comet だと通知向け、ライブチャットとかは無理に WebSocket ではなく HTTP/2 Stream とか使う方が無難だとおもう。

2023-02-26 11:43:12
V @voluntas

ストリーム API - Web API | MDN developer.mozilla.org/ja/docs/Web/AP… ということで今サーバーからちょろちょろ流す系はこれが無難なのではないか。

2023-02-26 12:01:58
V @voluntas

メッセージング系は Stream API で、通知系はロングポーリングで充分だと思う。自分は両方同時に使うので WebSocket にしてますが ... (Erlang なので WebSocket が恐ろしく楽というのはあります)

2023-02-26 12:03:09
V @voluntas

まとめると WebSocket は最終手段くらいで、可能な限りは使わない方がいい(サーバーサイドの実装が完全に WebSocket 専用になってしまう) 。ブラウザのストリーミングは Stream API を使い、通知はロングポーリングで充分。というのが自分の認識です。WebRTC は論外。

2023-02-26 12:07:38
V @voluntas

安易に WebSocket 選択して失敗した人って意外にいそう。基本的には自前よりは Pusher とか使った方が楽な場合は多いのは否めない。pusher.com/channels/prici… 月 $899 で 1 日 6000 万メッセージまで、同時接続数 2 万まで。ほとんどの場合は足りるでしょ ... 。

2023-02-26 14:23:46
V @voluntas

ブラウザアプリならロングポーリングで十分だと思いますし、スマホアプリなら APNs などを利用するのではないかと。 twitter.com/aqz_tmin/statu…

2023-02-26 17:04:27
アキウス・タマイナ @aqz_tmin

そう?(アプリのプッシュ通知とかどうするんだろう) twitter.com/voluntas/statu…

2023-02-26 16:56:07
V @voluntas

WebSocket がっつり使ってない人ほど、プッシュ通知にはWebSocket を使うべきと誤解してそうなので、いやそれロングポーリングで十分でしょと伝えていきたい。

2023-02-26 17:05:42
森木 一 @morikihajime

wss:// 通さないプロキシとか upgrade 落とすプロキシとか connection 書き換えるプロキシとか 30rps 程度で RST 返すライブラリとか到達順が保証されないとかあるし何より通信量が爆発するので本当に通知を WebSocket でやります?もうちょっと設計練りませんか?というのはお伝えしていきたい twitter.com/voluntas/statu…

2023-02-26 17:57:42
V @voluntas

そんなリアルタイムなプッシュ通知が来ないと困るサービスの方が少ないわけで ... 。

2023-02-26 18:09:42
V @voluntas

WebSocket が悪いとかは全然なくて、オーバーキルじゃない?本当に WebSocket 必要なの?双方向必要?ほんとに?というお気持ちです。

2023-02-26 18:54:16