websocketを用いたAPIとMPAは相性が悪い?


websocket-APIとREST-API

適当な説明↓

  • WebsocketはWebで軽量な双方向通信を行うことができるプロトコルとして知られています.
  • RESTはHTTPプロトコルを用いてデータのやり取りを行うことができます.

問題

Websocketを用いたAPIはMPA(multi page application)に適していないのでは
Websocketを使ってRPC形式のAPIを作っていた時に思ったのですが,ページ読み込み時はRESTより若干遅いです.

なぜ遅いのか

MPAでwebsocket-apiが遅いと感じるのは,単純ですが1回ハンドシェイクを挟むためです.
図に表すと分かりますがページ遷移時にWebsocket-APIを叩く場合は,最大でRESTの2RTT分遅くなってしまいます.

websocket-api v.s rest
          websocket                            REST
  server               client    │  server               client            
    ------upgrade req----->      │    -------api req------->
      handshake via http         │       hit api via http
    <--switching protocol--      │    <------api res--------
                                 │
      ↓ estab ws conn            │ 
    -------api req-------->      │
      hit api via ws             │
    <------api res---------      │

MPAでは,websocketのコネクションはページ遷移するとともに失われてしまいます.よって,ページ遷移時にはコネクションを再度繋ぎなおす必要があります.
更に,MPAではページ表示時にデータを取得する事が多いため,コネクション確立が遅い分websocketを使う旨味は...
ただし,繋いでさえいれば速いのでSPAとは相性がいいはずです(フロントはあんまり知らないので適当())

対応策

  • フロントをSPAにする.
  • Websocket-APIの他に同じ機能を持ったREST-APIをもう一つ作って,ページ遷移時はRESTだけを叩くようにする.
  • 諦めてRESTだけにする.