Netcat Like な WebSocket コマンド websocat を触ってみる。

こんにちは k-jun です。今回は、Netcat のように手軽に Terminal から WebSocket を試せるツール websocat を使ってみます。

https://github.com/vi/websocat

WebSocket って試すときにわざわざ ブラウザから CDN をインストールして、web console で叩いたりしていたので、こういうものがあると結構便利です。

Install

brew install websocat

インストールもしてみたので、WebSocket をつなぐ用のテストサーバーを作ってみようと思います。 適当に見つけてきたすごく小さな chat サーバーで起動します。最初 Socket.io で実装していてつながらないなぁ.. とやっていたのは内緒です。

const server = require('ws').Server;
const s = new server({ port: 3000 });

s.on('connection', function(ws) {
  ws.on('message', function(message) {
    console.log("Received: " + message);
    s.clients.forEach(function(client) {
      client.send(message + ' : ' + new Date());
    });
  });
  ws.on('close', function() {
    console.log('I lost a client');
  });
});
# server
$ node index.js
Received: hello
Received: world
I lost a client
# client1
$ websocat ws://127.0.0.1:3000
hello
hello  : Sat Aug 28 2021 03:41:18 GMT+0900 (GMT+09:00)
world  : Sat Aug 28 2021 03:42:59 GMT+0900 (GMT+09:00)

# ctrl-c
# client2
$ websocat ws://127.0.0.1:3000
hello  : Sat Aug 28 2021 03:41:18 GMT+0900 (GMT+09:00)
world
world  : Sat Aug 28 2021 03:42:59 GMT+0900 (GMT+09:00)

おお、良い感じに動作していますね。欲を言えば Socket.io に対応していて欲しかったですがそれは求めすぎというものでしょう。 軽めのツールで使いやすいですね。grpcurl のような cli ツール も存在しますし、これの GraphQL 版があっても良さそうですよね...。

それでは今回はこのへんで。