intellista

engineer's notes about application development, data analysis, and so on

Websocketを簡単に実装できる「socket.io」を知る

JavaScriptでWebsocketを実装するオンライン勉強会に参加しました。
私にはやや易しかったのですが、目玉の「socket.io」は初見の技術だったので面白かったです。

socket.io によるWebsocketの実装

Node.js上で動作する「socket.io」を使って、Websocketによる簡易チャットアプリを実装しました。
具体的には、次の記事の内容を行いました。非常にコンパクトでわかりやすい記事です。
qiita.com

記事は、Node.js (動作環境) がインストール済であることが暗黙の前提です。
まだの方は、事前にインストールしてください。

記事では、Webサーバとして定番の「Express.js」も使います。
こちらもNode.js上で動きます。
インストールは記事の中で行います。

socket.io の競合ライブラリは?

socket.ioと同じような機能のライブラリの概況をチェックしました。

今回は趣味ですが、仕事でライブラリを使うときは必ず、次の情報を確認します。

  • 世間的に広く使われているものか ≒ ダウンロード数
  • きちんとメンテされているか ≒ 更新日時、更新頻度
  • ライセンスは問題ないか

確認には「npm trends」が便利です。
上記の内容をグラフィカルに表示できます。
気になるライブラリをひとつ指定すると、ほぼ自動で競合の名前も挙がり、複数指定すれば簡単に見比べられます。

「npm trends」で競合ライブラリを比較しました。
socket.io vs websocket vs express ws vs ws vs sockjs vs primus vs grpc | npm trends

この記事時点での表示結果は下記になります。
f:id:parupuntist:20210404100409p:plain
「socket.io」は3番手で、その2倍弱くらいに2番手の「sockjs」があり、1番人気は「ws」で桁違いのダウンロード数です。

f:id:parupuntist:20210404100428p:plain

「updated」を見ると、どれも、最近メンテされている(放置されていない)ようで安心です。
「created」を見ると、「socket.io」が3つの中では最も古く、「sockjs」「ws」は同じくらいの時期です。

また、各ライフラリのリンク先(GitHub)を確認すると、いずれも「MIT LICENSE」なので、ライセンス面では安心して仕事で組み込めます。
※Node.js のライブラリは「MIT LICENSE」がほとんどの印象です。
 コピーレフト系(GPLLGPL)だと、自身のソース開示が条件になる場合があり、
 開示不要だとしても社内手続きが恐ろしく大変なので、コピーレフトは基本使わないです。
socket.io/LICENSE at master · socketio/socket.io · GitHub
f:id:parupuntist:20210404100441p:plain

sockjs-node/LICENSE at master · sockjs/sockjs-node · GitHub
f:id:parupuntist:20210404100455p:plain

ws/LICENSE at master · websockets/ws · GitHub
f:id:parupuntist:20210404100507p:plain

ws によるWebsocketの実装

ということで、「ws」のいい記事も見つけたので、貼ります。
qiita.com

こちらも、Node.js (動作環境) がインストール済であることが暗黙の前提です。

記事の1つめに「ws」のサンプルコードがあります。
2つめは「socket.io」のサンプルで、前述のものとほぼ同じです(同じ公式チュートリアルを参照しているので)が、前述のほうが説明がより丁寧だと思います。

まとめ

  • Websocketを簡単に実装できる「socket.io」がどんなものか動かしながら知れました。
  • Websocket「socket.io」は3番人気で、定番は後発の「ws」と知りました。
  • どちらも安心して仕事で使えそうです。