メインコンテンツまでスキップ

serve

エンジンが割り当てたポートで HTTP サーバーを起動し、メソッドをエンジンに登録し、グレースフルシャットダウンを処理します。

シグネチャ

rpc.serve(options: RpcServeOptions): Promise<RpcServer>

パラメータ

パラメータ説明
options.methodsRecord<string, RpcMethodEntry>メソッド名から定義またはハンドラー関数へのマップ

戻り値

RpcServer

動作

  1. 環境変数 HMCS_RPC_PORTHMCS_MOD_NAMEHMCS_PORT を読み取ります(MOD サービスの起動時にエンジンによって設定されます)。
  2. 127.0.0.1:{HMCS_RPC_PORT} で待ち受ける HTTP サーバーを作成します。
  3. エクスポネンシャルバックオフで POST /rpc/register を呼び出し、メソッドをエンジンに登録します(最大 10 回リトライ、100 ms → 5 s)。
  4. グレースフルシャットダウン用の SIGTERM ハンドラーをインストールします。

エラーレスポンス

MOD の RPC サーバーにリクエストが到着した際、以下のレスポンスを返す場合があります:

ステータス条件
400無効な JSON または Zod バリデーション失敗
404不明なメソッド名
405POST 以外のリクエスト
500ハンドラーがエラーをスロー

使用例

import { rpc } from "@hmcs/sdk/rpc";
import { z } from "zod";

const server = await rpc.serve({
methods: {
greet: rpc.method({
input: z.object({ name: z.string() }),
handler: async ({ name }) => ({ message: `Hello, ${name}!` }),
}),
ping: async () => ({ pong: true }),
},
});