源コードの場所: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
を使用して自分のメッセージキューからメッセージをポップし、処理します。