fontcolor_theme
Deepkit RPC

WebSocket

WebSocket は Deepkit RPC のデフォルトのトランスポートです。ブラウザでも Node でも動作し、すべての呼び出しで 1 つのコネクションを開いたまま維持します。また、RxJS の Observable、Subject、Collection によるストリーミング、アップロードとダウンロードの進捗、バックコントローラー(サーバーからクライアントへの呼び出し)、ピアツーピアメッセージなど、すべての機能をサポートしています。

サーバー間では TCP の方が高速です。ワーカースレッド、Web Worker、子プロセスとの通信には IPC を使用してください。コネクションを開いたままにできない環境では、HTTP がすべての呼び出しを個別のリクエストとして送信します。

Deepkit アプリ

Deepkit アプリは、HTTP サーバーのポート上で WebSocket を介して RPC コントローラーを提供します。設定は一切不要です:

import { App } from '@deepkit/app';
import { FrameworkModule } from '@deepkit/framework';
import { rpc } from '@deepkit/rpc';

@rpc.controller('user')
class UserController {
    @rpc.action()
    hello(name: string): string {
        return 'Hello ' + name;
    }
}

new App({
    controllers: [UserController],
    imports: [new FrameworkModule({ port: 8080 })],
}).run();
ts-node app.ts server:start

クライアント

import { RpcWebSocketClient } from '@deepkit/rpc';

const client = new RpcWebSocketClient('ws://localhost:8080');
const user = client.controller<UserController>('user');

await user.hello('Peter'); // 'Hello Peter'

クライアントは最初の呼び出し時に接続し、コネクションが失われた後は次の呼び出し時に再接続します。client.connect() は即座に接続し、client.disconnect() はコネクションを閉じます。

ブラウザでは、RpcWebSocketClient.fromCurrentHost() がページのホストに接続し、HTTPS ページでは wss:// を使用します。依存性注入を使用するフロントエンドでは、provideRpcWebSocketClient がクライアントを提供します:

import { provideRpcWebSocketClient } from '@deepkit/rpc';

// ページのオリジン、または指定された URL。ポートマッピングは別ポートで動作する開発サーバー用
providers: [provideRpcWebSocketClient(undefined, { 4200: 8080 })];

Node 22 以降には WebSocket が組み込まれています。それより古いバージョンでは、ws パッケージのクラスをアダプターに渡してください:

import { RpcClient, RpcWebSocketClientAdapter } from '@deepkit/rpc';
import WebSocket from 'ws';

const client = new RpcClient(new RpcWebSocketClientAdapter('ws://localhost:8080', WebSocket as any));

フレームワークなしで使用する

@deepkit/rpc-tcp の RpcWebSocketServer は、独自のポートで RpcKernel を提供します:

import { RpcKernel } from '@deepkit/rpc';
import { RpcWebSocketServer } from '@deepkit/rpc-tcp';

const kernel = new RpcKernel();
kernel.registerController(UserController, 'user');

const server = new RpcWebSocketServer(kernel, 'localhost:8081');
server.start({ host: 'localhost', port: 8081 });

認証

クライアントに設定されたトークンはコネクションごとに 1 回送信され、RpcKernelSecurity.authenticate がそれをコネクションのセッションに変換します。セキュリティを参照してください。

client.token.set('my-session-token');
English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)