リアルタイム通信を実現する方法として
- ポーリング
- ロングポーリング
- SSE
- WebSocket
の4つがあるらしい。
その違いをメモ。
違い
- ポーリング:
- クライアント側が定期的に「更新されてない?」と尋ねて、それに対してサーバー側は更新されていない場合は「更新されてないよ」と返し、更新されていた場合は更新されたデータを返す。これをひたすら繰り返す方式。
- ロングポーリング:
- クライアント側が「更新されてない?」と尋ねて、それに対してサーバー側は更新されるまで返事を保留し、更新されたタイミングで「更新されたよ」と更新されたデータを返す。そしてサーバーから返事が帰ってきたらすぐさまクライアント側は「更新されてない?」と尋ねる。これをひたすら繰り返す方式。
- クライアント側が「更新されてない?」と尋ねて、それに対してサーバー側は更新されるまで返事を保留し、更新されたタイミングで「更新されたよ」と更新されたデータを返す。そしてサーバーから返事が帰ってきたらすぐさまクライアント側は「更新されてない?」と尋ねる。これをひたすら繰り返す方式。
- SSE(Server Sent Events):
- クライアント側が「更新されてない?」と尋ねて、それに対してサーバー側は更新されるまで返事を保留し、更新されたタイミングで「更新されたよ」と更新されたデータを返す。さらにデータを返した後も接続は切らずにそのまま繋いでおき、今後データが更新されるたびに「更新されたよ」と更新されたデータを返す。
- クライアント側が「更新されてない?」と尋ねて、それに対してサーバー側は更新されるまで返事を保留し、更新されたタイミングで「更新されたよ」と更新されたデータを返す。さらにデータを返した後も接続は切らずにそのまま繋いでおき、今後データが更新されるたびに「更新されたよ」と更新されたデータを返す。
- WebSocket:
- SSEと似ているが、以下の2点が違う
- クライアント側からもデータを送れる(SSEはサーバ→クライアントという1方向にしか送れない)
- 使用するプロトコルがWebSocket専用のもの。(WebSocket以外の方法ではすべてHTTPプロトコルのみで行われてる)
- SSEと似ているが、以下の2点が違う
おわり
画像の引用元:ハンズオンNode.js
コメント