基礎と非同期I/O

デフォルトのビルドパラメータを使って、特殊なshared static this() モジュールコンストラクタによってvibe.dアプリケーションの main()関数は定義されます:

import vibe.d;
shared static this() {
    // ここにVibe.dのコード
}

モジュールコンストラクタはmain()の前にただ一度だけ実行されます。 Vibe.dは独自のmain()を提供してすべてのイベントループと 維持管理をユーザーコードから隠蔽します。

Vibe.dはファイバーを非同期I/Oを実装するために利用しています: 例えば読み込むデータがないなどの理由でソケットの呼び出しがブロックされるかもしれないときは常に、 現在実行中のファイバーは現在の実行コンテキストをyieldし、 別の操作のためにフィールドを離れます。データが利用可能になれば実行を再開します:

// ブロックするかもしれませんが透過的です。
// ソケットの準備ができているならvibe.dは
// ここに戻るようにします。
line = connection.readLine();
// ここもブロックするかもしれません
connection.write(line);

このコードは同期的で現在のスレッドをブロックするように見えますが、 そうではありません! コードは綺麗で簡潔ですが、その上で、 1つのコアで何千もの接続を可能にする非同期I/Oの力を利用しています。

すべてのvibe.dの機能はファイバーを基にした非同期ソケット操作を利用しており、 あなたはひとつの遅いMongoDBサーバーの接続がアプリケーション全体を ブロックすることについて心配する必要はありません。

シンプルなTCPベースのechoサーバを実装する方法についての例を確認してください。

rdmd playground.d