httpは単方向通信
WebSocketは双方向通信
ここ最近は色々SNSやネットサービスがありふれてきました。
Web1.0からWeb2.0、そしてWeb3.0の時代になり、より活発化してきました。
今までは人と人が簡単に繋がることのできない時代でしたが、こういったサービスができ、さまざまな人とネット上でチャットなどができるようになり、
容易に知らない人と知り合えるようになりました。
その背景として、以下のような通信の技術が上がったことにもよるのかなと思います!
単方向通信とは?
私たちが常日頃アクセスしているwebがまさに単方向通信です。
双方向通信とは?
双方向通信とは、双方向なのでクライアントサイドとサーバサイド、互いに自発的に通信をするというものです。
クライアントサイドが通信をするのはまさに単方向通信と同じなわけですが、
サーバサイドから通信をするのは今までのHTTPにはなかった通信です。
クライアントサイドは私たちが普通にブラウザでリクエストするだけで通信がされるわけですが、
サーバサイドからクライアントサイドに通信をするってどういう時だろう?
そしてどういう原理で通信するんだろう?って思うと思います!
有名なものとして、Webであればチャット!
掲示板とかでチャットをします。そうすると、今アクセスしているユーザーにリアルタイムにPCの画面に表示されます。
今までだとHTTPであればリロードをかけないと、更新されずチャットが来てることに気づきませんでした。
でも、サーバ側で
アプリだとLineとか!
Lineもアプリを開いていてメッセージを送ります。
そしてアプリを開いてても開いてなくても、リアルタイムでメッセージの通知がきます。
これも裏で双方向通信が働いてサーバから送信をするわけです。
今までは単方向通信では、
クライアントサイドからサーバにリクエスト投げると、それであ!リクエストきたからサーバはレスポンスしてあげないと!ってことでクライアントにかえしてました。
いわば、強制ですね。
そして、リクエストがきたユーザーに対してレスポンスを返す。これが重要。
でも、双方向通信ではクライアントからリクエストが来て、でもそのユーザーにもレスポンスをしつつ、別のユーザーにも通知を送るようなことができるようになりました。
つまり、サーバは全くリクエストが来ていないユーザーにも自ら通知を送ることができるわけです。
これでチャットが出来上がってます。
双方向通信を実装するには?
双方向通信を実装するには以下で簡単に実装して試してみることができます!
・JavascriptでのWebsocket(HTTPのアップグレード版)
・Node.js
さらにはFirebaseというGoogleが無料で出しているサービスがありMBaaSです。(使いまくると有料です。)
Firebaseも裏の仕組みとしてはWebSocketを使用しており、
代表格であるFirestoreも、同じように
さらにトンネルなどでネットがつながらなかったとしても、オンラインになった瞬間能動的にサーバから更新がかかります。
Firebaseは以下で扱ってます。