wsServer - C で書かれた非常に小さな WebSocket サーバー ライブラリ
wsServer は、C で書かれた小型軽量の WebSocket サーバー ライブラリであり、使いやすく、高速で、ハッキング可能で、RFC 6455 に準拠することを目的としています。
主な機能は次のとおりです。
テキストおよびバイナリ メッセージの送受信
ピンポンフレーム
開会式・閉会式の握手
イベントベース (onmessage、onopen、onclose)
移植性: Windows、Linux (Android を含む)、macOS、FreeBSD で正常に動作します。
「詳細な」分析については、アウトバーンのレポートとドキュメントを参照してください。
wsServer には C99 互換コンパイラ (GCC、Clang、TCC など) のみが必要で、外部ライブラリは必要ありません。
Linux 環境で wsServer を構築するための推奨される方法:
git clone https://github.com/Theldus/wsServercd wsServer/ make# オプションで、ユーザーはシステムに wsServer をインストールすることもできます。# デフォルトのパスに、または PREFIX または DESTDIR 環境変数を Makefile に指定することによって# 行うことができます。make install # または make install DESTDIR=/my/folder/
CMake を使用すると、ユーザーは Linux 以外の環境で wsServer を簡単に構築でき、IDE を使用してプロジェクトを自動的に構築することもできます。それがあなたの場合:
git clone https://github.com/Theldus/wsServercd wsServer/ mkdir ビルド && cd ビルド/ cmake .. 作る ./examples/echo/echo # 受信接続を待機しています...
Windows は MinGW によるネイティブ サポートを備えており、ツールチェーンのセットアップとビルド手順についてはここで詳しく説明されています。
wsServer を使用すると、次の 3 種類のイベントのみに集中できるようになり、ソケット管理が簡素化されます。
/* 新しいクライアント。 */void onopen(ws_cli_conn_t client);/* クライアントが切断されました。 */void onclose(ws_cli_conn_t client);/* クライアントがテキスト メッセージを送信しました。 */void onmessage(ws_cli_conn_t client, const unsigned char *msg,uint64_t size, int 型);
心配する必要があるのはこれだけです。ソケットの戻り値、接続の受け入れなどについて考える必要はありません。おまけに、各クライアントは別のスレッドで処理されるため、その点についても心配する必要はありません。
それぞれの HTML ファイルを含むその他の例は、examples/ フォルダーにあります ;-)。
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <ws.h>/** * @brief この関数は、新しい接続が開かれるたびに呼び出されます。 * @param client クライアント接続。 */void onopen(ws_cli_conn_t クライアント) {char *cli;cli = ws_getaddress(client);printf("接続が開かれました、アドレス: %sn", cli); }/** * @brief この関数は、接続が閉じられるたびに呼び出されます。 * @param client クライアント接続。 */void onclose(ws_cli_conn_t クライアント) {char *cli;cli = ws_getaddress(client);printf("接続が閉じられました、アドレス: %sn", cli); }/** * @brief メッセージ イベントがここに入ります。 * @param client クライアント接続。 * @param msg メッセージの内容。 * @param size メッセージのサイズ。 * @param type メッセージの種類。 */void onmessage(ws_cli_conn_t client,const unsigned char *msg, uint64_t サイズ, int 型) {char *cli;cli = ws_getaddress(client);printf("メッセージを受信しました: %s (%zu)、送信元: %sn", msg,size, cli);sleep(2);ws_sendframe_txt(client, "こんにちは");スリープ(2);ws_sendframe_txt(クライアント, "世界"); }int main(void) {/* * メインループ。この関数は戻りません*。 * * *.thread_loop が != 0 の場合、 * 新しい接続を処理するために新しいスレッドが作成され、 * ws_socket() は非ブロッキングになります。 */ws_socket(&(struct ws_server){/* * 次のようなホストをバインドします。 * localhost -> localhost/127.0.0.1 * 0.0.0.0 -> グローバル IPv4 * :: -> グローバル IPv4+IPv6 (デュアル スタック) * /.host = "ローカルホスト", .port = 8080、 .thread_loop = 0、 .timeout_ms = 1000、 .evs.onopen = &onopen、 .evs.onclose = &onclose, .evs.onmessage = &onmessage});return (0); }
上記の例は、 make examples
を使用して構築できます。
extra/toyws
内には、ToyWS と呼ばれる関連プロジェクトがあります。 ToyWS は、wsServer で動作するためだけに作られた、非常にシンプルで愚かな WebSocket クライアントです。非常に制限されているため、wsServer 以外のサーバーでの使用は強く推奨されず、wsServer と組み合わせてのみ使用することを目的としています。
このミニプロジェクトは、wsServer の補助としてのみ機能し、ユーザーは wsServer 全体を使用するために追加のプロジェクトを使用する必要がなくなります。
詳細については、extra/toyws/README.md をご覧ください。
wsServer は現在暗号化をサポートしていません。ただし、既存のプロジェクトに TLS サポートを追加するプロキシである Stunnel と組み合わせて使用することは可能です。以下の 4 つの簡単な手順に従うだけで、wsServer で TLS サポートを取得できます。
wsServer は常にコミュニティにオープンであり、問題、ドキュメント、テスト、新機能、バグ修正、タイプミスなどの貢献を喜んで受け入れます...ようこそ。 PR を送信する前に、コーディング スタイルのガイドラインを必ずお読みください。
このプロジェクトは役に立ちましたか?それについて何か言いたいことはありますか?ここにコメントを残してください。
wsServer は GPLv3 ライセンスに基づいてライセンスされています。 Davidson Francis と他の寄稿者によって書かれました。