源コードの場所:https://github.com/cloudwu/skynet
フレームワークの構造#
skynet-src:Skynet のコアソースコードで、メインフレームワーク、サービス管理、ネットワーク通信、タイマーなどのモジュールが含まれています。3rd:Skynet が依存するサードパーティライブラリで、LuaJIT、luasocket などが含まれています。config:Skynet の設定ファイルディレクトリです。example:Skynet のサンプルコードディレクトリで、エコーサービス、pingpong の例、ソケットモジュールの例などが含まれています。luaclib:Skynet の C 拡張ライブラリで、cjson、protobuf などが含まれています。lualib:Skynet の Lua 拡張ライブラリで、skynet、socket などが含まれています。service:Skynet のサービスコードディレクトリで、各サービスの Lua ソースコード、初期化スクリプトなどが含まれています。test:Skynet のテストコードディレクトリです。
コアモジュール#
skynet_main.c:Skynet のメイン関数で、パラメータの解析、初期化、サービスの起動などが含まれています。skynet.h:Skynet のコアヘッダファイルで、データ構造の定義、関数の宣言などが含まれています。service-src:Skynet のサービス管理モジュールで、サービスの登録、サービスの検索、メッセージの処理などが含まれています。lualib-src:Skynet の Lua 拡張モジュールで、Lua と C の間の相互作用関数などが含まれています。timer.c:Skynet のタイマーモジュールで、タイマーの設定、削除などが含まれています。socket_server.c:Skynet のネットワーク通信モジュールで、TCP/UDP のネットワーク接続、メッセージの処理などが含まれています。logger.c:Skynet のログモジュールで、ログの記録、出力などが含まれています。malloc_hook.c:Skynet のメモリ管理フックで、メモリ使用状況の統計に使用されます。
サービス管理#
- サービスの登録:サービスをフレームワークに登録し、他のサービスから呼び出すことができるようにします。
- サービスの検索:サービス名に基づいて対応するサービスハンドルを検索します。
- メッセージの処理:他のサービスからのメッセージを処理します。
Lua 拡張モジュール#
skynet.lua:Skynet のコアインターフェースで、サービスの登録、メッセージの送信、タイマーなどが含まれています。socket.lua:ネットワーク通信モジュールで、TCP、UDP、HTTP などのプロトコルのサポートが含まれています。cjson.lua:JSON パースライブラリです。protobuf.lua:Google の Protobuf ライブラリの Lua 実装です。
ネットワーク通信#
1. ネットワークモデル
skynet_socket:ソケットの構造体で、ソケットの ID、タイプ、アドレスなどの情報が含まれています。struct skynet_context:アクターのコンテキスト構造体で、アクターの名前、メッセージキューなどの情報が含まれています。skynet_socket_poll:ソケットのポーリング関数で、ネットワークイベントの処理に使用されます。skynet_socket_send:指定されたソケットにデータを送信します。skynet_socket_connect:指定されたアドレスとポート番号にソケットを接続します。skynet_socket_bind:ソケットを指定されたアドレスとポート番号にバインドします。skynet_socket_listen:ソケットのリスニングを開始します。skynet_socket_close:指定されたソケットを閉じます。
2. ネットワーク通信
skynet_send:指定されたアクターにメッセージを送信します。この関数は、対象のアクターを検索し、メッセージキューにメッセージを追加します。skynet_socket_start:ネットワークサービスを起動し、指定されたポート番号でリスニングします。skynet_socket_poller:ネットワークのポーリング関数で、ネットワークイベントの処理に使用されます。skynet_socket_udp:UDP ソケットを作成し、指定されたアドレスとポート番号にバインドします。skynet_socket_udp_connect:UDP ソケットを指定されたアドレスとポート番号に接続します。skynet_socket_udp_send:指定された UDP ソケットにデータを送信します。skynet_socket_udp_address:UDP ソケットのアドレス情報を取得します。skynet_socket_udp_close:指定された UDP ソケットを閉じます。
アクターモデルに関連するもの#
1. メッセージキュー
-
struct message:メッセージの構造体で、メッセージのソース、ターゲット、タイプ、データなどの情報が含まれています。メッセージキューには
message構造体が格納されており、メッセージのソース、ターゲット、タイプ、データなどの情報が含まれており、メッセージの送受信と処理を容易にするために使用されます。 -
struct message_queue:メッセージキューの構造体で、メッセージキューのヘッド、テールポインタ、メッセージの数などの情報が含まれています。message_queue構造体はメッセージキューの管理構造体で、メッセージキューのヘッド、テールポインタ、メッセージの数などの情報が含まれており、メッセージキューのメッセージの追加、ポップなどの操作を容易にするために使用されます。 -
skynet_mq_push:メッセージキューにメッセージを追加します。skynet_mq_push関数は、メッセージキューにメッセージを追加し、メッセージをキューの末尾に追加するために使用されます。 -
skynet_mq_pop:メッセージキューからメッセージをポップします。skynet_mq_pop関数は、メッセージキューからメッセージをポップし、メッセージをキューの先頭から取り出すために使用されます。 -
skynet_mq_length:メッセージキューのメッセージ数を取得します。skynet_mq_length関数は、メッセージキューのメッセージ数を取得するために使用され、メッセージの数を簡単に統計することができます。 -
skynet_mq_alloc:メモリプールからメッセージキューを割り当てます。skynet_mq_alloc関数は、メモリプールから新しいメッセージキューを割り当てるために使用され、メッセージの格納と管理に使用されます。 -
skynet_mq_mark_release:メッセージキューを解放状態にマークします。メッセージキュー内のすべてのメッセージが処理された後、メッセージキューをメモリプールに戻すことができます。skynet_mq_mark_release関数は、メッセージキューを解放状態にマークします。メッセージキュー内のすべてのメッセージが処理された後、メッセージキューをメモリプールに戻すことができます。メモリの管理を容易にするために使用されます。 -
skynet_mq_release:解放状態にマークされたメッセージキューを解放します。skynet_mq_release関数は、解放状態にマークされたメッセージキューを解放するために使用され、メモリの管理を容易にするために使用されます。
2. アクターモデルの通信メカニズム
-
struct skynet_context:アクターのコンテキスト構造体で、アクターの名前、メッセージキューなどの情報が含まれています。skynet_context構造体はアクターのコンテキスト構造体で、アクターの名前、メッセージキューなどの情報が含まれており、アクターの状態と各種情報を管理するために使用されます。 -
skynet_context_new:新しいアクターを作成し、そのコンテキスト構造体を初期化します。skynet_context_new関数は、新しいアクターを作成し、そのコンテキスト構造体を初期化するために使用され、アクターの管理と使用を容易にします。 -
skynet_context_release:アクターのコンテキスト構造体を解放します。skynet_context_release関数は、アクターのコンテキスト構造体を解放するために使用され、メモリの管理を容易にします。 -
skynet_context_push:アクターのメッセージキューにメッセージを追加します。skynet_context_push関数は、アクターのメッセージキューにメッセージを追加するために使用され、メッセージの送受信と処理を容易にします。 -
skynet_context_pop:アクターのメッセージキューからメッセージをポップします。skynet_context_pop関数は、アクターのメッセージキューからメッセージをポップし、メッセージの処理を容易にするために使用されます。 -
skynet_context_handle_message:アクターのメッセージキュー内のすべてのメッセージを処理します。skynet_context_handle_message関数は、アクターのメッセージキュー内のすべてのメッセージを処理するために使用され、メッセージの一元的な処理を容易にします。 -
skynet_send:指定されたアクターにメッセージを送信します。この関数は、対象のアクターを検索し、メッセージキューにメッセージを追加します。skynet_send関数は、指定されたアクターにメッセージを送信するために使用されます。この関数は、対象のアクターを検索し、メッセージキューにメッセージを追加します。メッセージの送受信と処理を容易にするために使用されます。
3. メッセージの送受信プロセス
- 送信側は
skynet_sendを使用して指定されたアクターにメッセージを送信します。 - Skynet はメッセージのターゲットアクターを検索し、そのメッセージキューにメッセージを追加します。
- 受信側は
skynet_context_popを使用して自分のメッセージキューからメッセージをポップし、処理します。