gwsocket は、C で書かれたシンプルなスタンドアロン、言語に依存しない RFC6455 準拠の WebSocket サーバーです。アプリケーションとクライアントのブラウザーの間に位置し、これら 2 つの間の高速な双方向通信を簡単かつ柔軟に実現します。詳細については、https://gwsocket.io をご覧ください。
非常に簡単です。アプリケーション(stdout)からの出力をstdin
またはファイル (名前付きパイプ) にリダイレクトし、 gwsocket にデータをブラウザーに転送させるだけです。それだけです。
たとえば、サーバーのログをブラウザに追跡するのはこれほど簡単ではありません
# tail -f /var/log/nginx/access.log > /tmp/wspipein.fifo
または
# tail -f /var/log/nginx/access.log | gwsocket
クライアントのデータをアプリケーションに(stdin)取り込むこともできます。実際、お気に入りの ncurses プログラムの出力をブラウザに送信することもできます。上記のスクリーンキャストを参照してください。
私は、データをパイプで送受信するだけでGoAccessのバージョン 1.0 に使用できる、C で書かれた高速でシンプルな依存関係やライブラリのないRFC6455 準拠のWebSocket サーバーを必要としていました。WebSocket は簡単になりました。
gwsocket は言語に依存しません。ブラウザからデータを受信する方法とブラウザに送信する方法の詳細と例については、マニュアル ページを参照してください。
gwsocket のインストールは非常に簡単です。ダウンロードして解凍し、次のようにコンパイルするだけです。
$ wget https://tar.gwsocket.io/gwsocket-0.4.tar.gz
$ tar -xzvf gwsocket-0.4.tar.gz
$ cd gwsocket-0.4/
$ ./configure
$ make
# make install
依存関係は必要ありません。素晴らしいですね:)、まあ、ほとんどgcc
、 make
などが必要です。
$ git clone s://github.com/allinurl/gwsocket.git
$ cd gwsocket
$ autoreconf -fiv
$ ./configure
$ make
# make install
アプリケーションとクライアントのブラウザーの間にチャネルを確立するために、gwsocket はユーザーがデータの送受信を可能にする 2 つのメソッドを提供します。 1 つ目は、標準入力 (stdin) と標準出力 (stdout) を使用する方法です。 2 番目の方法は、固定サイズのヘッダーとその後にペイロードを使用する方法です。詳細については、以下のオプションを参照してください。
標準入出力は、クライアントとの間でデータを送受信する最も簡単な方法です。ただし、すべてのクライアントへのメッセージのブロードキャストに限定されます。特定のクライアントとの間でメッセージを送受信するには、次のセクションで厳密モードを使用します。ここで言語固有の例を参照してください。
gwsocket は、データを送受信するための独自の小さなプロトコルを実装します。 stdin/stdoutモードとは対照的に、strict モードでは、特定の接続されたクライアントとの間でデータを送受信したり、誰が WebSocket 接続を開いた/閉じたかを追跡したりすることができます。また、単一のメッセージに必要な量のデータをパックして送信することもできます。ここで言語固有の例を参照してください。
次のオプションをコマンド ラインに指定できます。
コマンドラインオプション | 説明 |
---|---|
-p --port | バインドするポートを指定します。 |
-h --help | コマンドラインのヘルプ。 |
-V --version | バージョン情報を表示して終了します。 |
--access-log=<path/file> | アクセスログのパス/ファイルを指定します。 |
--addr=<addr> | バインドするアドレスを指定します。 |
--echo-mode | 受信したすべてのメッセージをエコーするようにサーバーを設定します。 |
--max-frame-size=<bytes> | WebSocket フレームの最大サイズ。 |
--origin=<origin> | クライアントがハンドシェイク時に指定されたオリジン ヘッダーを送信するようにします。 |
--pipein=<path/file> | 指定されたパス/ファイルから読み取る名前付きパイプ (FIFO) を作成します。 |
--pipeout=<path/file> | 指定されたパス/ファイルに書き込む名前付きパイプ (FIFO) を作成します。 |
--std | --stdin と--stdout 有効にします。 |
--stdin | 標準入力を WebSocket に送信します。 |
--stdout | 受信したWebSocketデータをstdoutに送信します。 |
--strict | 厳密モードを使用してメッセージを解析します。詳細についてはマニュアルページを参照してください。 |
--ssl-cert=<cert.crt> | SSL証明書へのパス。 |
--ssl-key=<priv.key> | SSL秘密キーへのパス。 |
--unix-socket=<addr> | サーバーをバインドする UNIX ドメインのソケット アドレスを指定します。 |
epoll
とkqueue
のサポートMITライセンス取得済み
gwsocket に関するヘルプは大歓迎です。最も役立つ方法は、試してフィードバックを提供することです。 Github の問題トラッカーやプル リクエストを自由に使用して、コードの変更について議論したり送信したりできます。
楽しむ!