0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SOCKET-MANAGERを使ったREST-APIサーバー開発の手引き<CUEIとの実装レベルでの関係>

0
Posted at

はじめに

REST-API は、SOCKET-MANAGER Framework の中核である CUEI(Communication / Union / Event / IPC) アーキテクチャの上で動作します。
HTTP リクエスト処理もソケット通信と同じイベント駆動モデルに統合されており、内部的には Event や IPC と密接に連携しながら処理が進みます。

本ページでは、REST-API が CUEI のどの層に位置し、どのように連携して動作するのかを実装レベルの視点から解説します。

CUEI とは

統合抽象化レイヤー

CUEI(Communication / Union / Event / IPC)は、SOCKET-MANAGER Framework の中心となる抽象化レイヤーです。

REST-API、WebSocket、TCP、UDP など、異なる通信方式を 同じ開発体験で扱えるように統一する ことを目的としています。

CUEI は以下の4つの要素で構成されます。

● Communication(通信抽象化)
● Union(Context / 共有基盤)
● Event(イベントループ / ステートマシン)
● IPC(サーバー間通信)

REST-API サーバーは、この CUEI の上に構築されており、HTTP 処理・状態遷移・分割送信・スケールアウトなどを統合的に扱えます。

REST-API 全体の概要については以下のページを参照してください。

Communication

通信方式の統一抽象化

Communication は、以下のような異なる通信方式を統一的に扱うためのレイヤーです。

● HTTP(REST-API)
● WebSocket
● TCP / UDP
● 独自プロトコル

これらの通信方式は内部で抽象化され、イベント処理側では プロトコルの違いを意識せずに実装 できます。

REST-API における役割

REST-API では、Communication 層が以下を担当します。

● HTTP メッセージの受信(PSR-7 準拠)
● RequestWrapper / ResponseWrapper の生成
● Keep-Alive / Connection 管理
● Chunked / SSE / Range の送信制御

これにより、REST-API の実装者は HTTP の細かい仕様を意識せずに、シンプルなコードで API を構築できます。

Union(Context)

Context の役割

Union は、REST-API の実行に必要な情報をまとめた Context(共有基盤) を提供します。

Context には以下が含まれます。

● RequestWrapper(HTTP リクエスト)
● ResponseWrapper(HTTP レスポンス)
● IPC 情報(サーバー間通信)
● ユーザー定義パラメータ
● サーバー内部状態

統一 API の利点

Context を使うことで、どのイベント処理でも以下のように統一的にアクセスできます。

Context の例
$ctx->request()->body();
$ctx->response()->json(['ok' => true]);
$ctx->simple_socket->send(['task' => 'run']);

イベントハンドラ、ステートマシン、IPC など、どの実装方式でも同じ API を使えるため、学習コストが大幅に下がります。

Event System(イベントループ / ステートマシン)

イベントループの役割

Event は、SOCKET-MANAGER の実行モデルを支える仕組みで、以下を担当します。

● イベントループの管理
● コルーチン実行
● 非同期処理の制御
● 長時間接続の管理(SSE / WebSocket)
● コンテキストの FIFO 形式の送受信バッファ制御
● イベント多重起動の防止と処理順序の保証

ステートマシン(UNIT)

ステートマシンは、複雑な処理を状態単位(UNIT)に分割して実行する仕組みです。

REST-API では以下のような用途で利用されます。

● Chunked Transfer の分割送受信
● SSE(Server-Sent Events)の継続送受信
● Range 送受信(部分的なファイル送受信)
● 大容量処理の分割実行

イベントハンドラ型との違い

● イベントハンドラ型 → 単一メソッドで完結する処理
● ステートマシン型 → 状態遷移を伴う処理

どちらも CUEI の Event によって統一的に扱われます。

IPC(サーバー間通信)

IPC の役割

IPC は、複数のサーバー間でデータをやり取りするための仕組みです。

● マルチサーバー構成
● 負荷分散
● バックグラウンド処理
● 分散タスク実行

Parallel クラス

IPC は Parallel クラスを通じて利用できます。

IPC の例
$ctx->simple_socket->send(['task' => 'run']);

Launcher と組み合わせることで、サーバー監視・CPU 割り当て・プロセス管理などの DevOps 機能も統合できます。

おわりに

本ページで紹介した CUEI の各要素が、REST-API とどのように結びついているのかを、最後に簡単に整理します。

REST-API と CUEI 四象限のつながり

CUEI(Communication / Union / Event / IPC)は、4つの要素が互いに連携し合うことで成立する SOCKET-MANAGER Framework の統合基盤です。
REST-API はこのうち Communication(TCP) に属し、クライアント(ユーザー)からの HTTP リクエストを受け取る役割を担います。

一方で、同じサービス(=1プロセス)内には IPC を担う別モジュール(UDP) が存在し、SocketManager や SimpleSocket を通じて、他のサービスと疎結合に協調します。

下図は、1サービス内における Communication(TCP)と IPC(UDP)の構成例を示したものです。
実際の IPC 構成はプロジェクトの要件に応じて自由に設計できるため、あくまで一例としてご覧ください。

1サービス=1プロセス内で、TCPモジュールがCommunicationを、UDPモジュールがIPCを担当し、共通のEventとUnionを共有して動作する構造の例

このように、REST-API は CUEI の一部として動作しながら、必要に応じて IPC を通じて外部サービスと連携することで、 マイクロサービス構成の一部としても活用できます

さらに、CUEI に Operation(運用)を加えた CUEI/O では、Launcher がサービスの起動・監視・メトリクス収集などの DevOps 機能を統合的に管理します。
REST-API もこの運用基盤の一部として動作します。

このように、REST-API は CUEI、CUEI/O の仕組みと連携することで、通信・状態管理・協調・運用が一貫したアーキテクチャの上で実現されます。

CUEI そのものの設計思想や四象限モデルについては、以下のページを参照してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?