emo

emo

Skynetのソースコード解析-構造解析

源コードの場所: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. メッセージの送受信プロセス

  1. 送信側は skynet_send を使用して指定されたアクターにメッセージを送信します。
  2. Skynet はメッセージのターゲットアクターを検索し、そのメッセージキューにメッセージを追加します。
  3. 受信側は skynet_context_pop を使用して自分のメッセージキューからメッセージをポップし、処理します。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。